diff options
| author | Pavel Machek <pavel@suse.de> | 2006-06-13 21:31:39 +0000 | 
|---|---|---|
| committer | Steve French <sfrench@us.ibm.com> | 2006-06-13 21:31:39 +0000 | 
| commit | 0fd1ffe0633b4b039b343b753598e6df435e034d (patch) | |
| tree | 2b7aca82f26ed911dd86f47af80456b35ea776b8 | |
| parent | 6344a423e5806d138923caa1d7699f3b7809fe43 (diff) | |
[CIFS] Fix suspend/resume problem which causes EIO on subsequent access to
the mount.
Signed-off-by: Pavel Machek <pavel@suse.de>
Signed-off-by: Steve French <sfrench@us.ibm.com>
| -rw-r--r-- | fs/cifs/cifsfs.c | 2 | ||||
| -rw-r--r-- | fs/cifs/connect.c | 24 | 
2 files changed, 13 insertions, 13 deletions
| diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 700570522b23..fb7c11c2c913 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -905,7 +905,7 @@ static int cifs_dnotify_thread(void * dummyarg)  	struct cifsSesInfo *ses;  	do { -		if(try_to_freeze()) +		if (try_to_freeze())  			continue;  		set_current_state(TASK_INTERRUPTIBLE);  		schedule_timeout(15*HZ); diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index e6f3d2fff6c0..faaf9eb15b9f 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -367,21 +367,21 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)  			continue;  		if (bigbuf == NULL) {  			bigbuf = cifs_buf_get(); -			if(bigbuf == NULL) { -				cERROR(1,("No memory for large SMB response")); +			if (!bigbuf) { +				cERROR(1, ("No memory for large SMB response"));  				msleep(3000);  				/* retry will check if exiting */  				continue;  			} -		} else if(isLargeBuf) { -			/* we are reusing a dirtry large buf, clear its start */ +		} else if (isLargeBuf) { +			/* we are reusing a dirty large buf, clear its start */  			memset(bigbuf, 0, sizeof (struct smb_hdr));  		}  		if (smallbuf == NULL) {  			smallbuf = cifs_small_buf_get(); -			if(smallbuf == NULL) { -				cERROR(1,("No memory for SMB response")); +			if (!smallbuf) { +				cERROR(1, ("No memory for SMB response"));  				msleep(1000);  				/* retry will check if exiting */  				continue; @@ -401,12 +401,12 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)  		    kernel_recvmsg(csocket, &smb_msg,  				 &iov, 1, 4, 0 /* BB see socket.h flags */); -		if(server->tcpStatus == CifsExiting) { +		if (server->tcpStatus == CifsExiting) {  			break;  		} else if (server->tcpStatus == CifsNeedReconnect) { -			cFYI(1,("Reconnect after server stopped responding")); +			cFYI(1, ("Reconnect after server stopped responding"));  			cifs_reconnect(server); -			cFYI(1,("call to reconnect done")); +			cFYI(1, ("call to reconnect done"));  			csocket = server->ssocket;  			continue;  		} else if ((length == -ERESTARTSYS) || (length == -EAGAIN)) { @@ -415,15 +415,15 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server)  				tcpStatus CifsNeedReconnect if server hung */  			continue;  		} else if (length <= 0) { -			if(server->tcpStatus == CifsNew) { -				cFYI(1,("tcp session abend after SMBnegprot")); +			if (server->tcpStatus == CifsNew) { +				cFYI(1, ("tcp session abend after SMBnegprot"));  				/* some servers kill the TCP session rather than  				   returning an SMB negprot error, in which  				   case reconnecting here is not going to help,  				   and so simply return error to mount */  				break;  			} -			if(length == -EINTR) {  +			if (!try_to_freeze() && (length == -EINTR)) {  				cFYI(1,("cifsd thread killed"));  				break;  			} | 
