[CIFS] Fix suspend/resume problem which causes EIO on subsequent access to
authorPavel Machek <pavel@suse.de>
Tue, 13 Jun 2006 21:31:39 +0000 (21:31 +0000)
committerSteve French <sfrench@us.ibm.com>
Tue, 13 Jun 2006 21:31:39 +0000 (21:31 +0000)
the mount.

Signed-off-by: Pavel Machek <pavel@suse.de>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/cifsfs.c
fs/cifs/connect.c

index 7005705..fb7c11c 100644 (file)
@@ -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);
index e6f3d2f..faaf9eb 100644 (file)
@@ -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;
                        }