cifs_reconnect(server);
csocket = server->ssocket;
continue;
- } else if (length == -ERESTARTSYS) {
- cFYI(1,("ERESTARTSYS returned from sock_recvmsg"));
+ } else if ((length == -ERESTARTSYS) || (length == -EAGAIN)) {
+ cFYI(0,("ERESTARTSYS returned from sock_recvmsg"));
schedule_timeout(1); /* minimum sleep to prevent looping
allowing socket to clear and app threads to set
tcpStatus CifsNeedReconnect if server hung */
int rc = 0;
if(*csocket == NULL) {
- rc = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, csocket);
- if (rc < 0) {
+ rc = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, csocket);
+ if (rc < 0) {
cERROR(1, ("Error %d creating socket",rc));
*csocket = NULL;
return rc;
- } else {
+ } else {
/* BB other socket options to set KEEPALIVE, NODELAY? */
- struct timeval tval;
- tval.tv_sec = 10;
- tval.tv_usec = 0;
cFYI(1,("Socket created"));
- sock_setsockopt(*csocket, SOL_SOCKET, SO_RCVTIMEO,
- (char*)&tval, sizeof(struct timeval));
-
}
}
}
}
+ /* Eventually check for other socket options to change from
+ the default. sock_setsockopt not used because it expects
+ user space buffer */
+ (*csocket)->sk->sk_rcvtimeo = 8 * HZ;
+
return rc;
}