Loading fs/cifs/cifsglob.h +2 −1 Original line number Diff line number Diff line /* * fs/cifs/cifsglob.h * * Copyright (C) International Business Machines Corp., 2002,2003 * Copyright (C) International Business Machines Corp., 2002,2005 * Author(s): Steve French (sfrench@us.ibm.com) * * This library is free software; you can redistribute it and/or modify Loading Loading @@ -321,6 +321,7 @@ struct mid_q_entry { __u8 command; /* smb command code */ unsigned multiPart:1; /* multiple responses to one SMB request */ unsigned largeBuf:1; /* if valid response, is pointer to large buf */ unsigned multiResp:1 /* multiple trans2 responses for one request */ }; struct oplock_q_entry { Loading fs/cifs/connect.c +25 −6 Original line number Diff line number Diff line Loading @@ -365,14 +365,30 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server) length = kernel_recvmsg(csocket, &smb_msg, &iov, 1, pdu_length - total_read, 0); if (length == 0) { if((server->tcpStatus == CifsExiting) || (length == -EINTR)) { /* then will exit */ goto dmx_loop_end; } else if (server->tcpStatus == CifsNeedReconnect) { cifs_reconnect(server); csocket = server->ssocket; /* Reconnect wakes up rspns q */ /* Now we will reread sock */ goto dmx_loop_end; } else if ((length == -ERESTARTSYS) || (length == -EAGAIN)) { msleep(1); /* minimum sleep to prevent looping allowing socket to clear and app threads to set tcpStatus CifsNeedReconnect if server hung */ continue; } else if (length <= 0) { cERROR(1, ("Zero length receive when expecting %d ", ("Received no data, expecting %d", pdu_length - total_read)); cifs_reconnect(server); csocket = server->ssocket; wake_up(&server->response_q); continue; goto dmx_loop_end; } } length += 4; /* account for rfc1002 hdr */ Loading Loading @@ -434,6 +450,9 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server) wake_up(&server->response_q); continue; } dmx_loop_end: cFYI(1,("Exiting cifsd loop")); } spin_lock(&GlobalMid_Lock); server->tcpStatus = CifsExiting; Loading Loading
fs/cifs/cifsglob.h +2 −1 Original line number Diff line number Diff line /* * fs/cifs/cifsglob.h * * Copyright (C) International Business Machines Corp., 2002,2003 * Copyright (C) International Business Machines Corp., 2002,2005 * Author(s): Steve French (sfrench@us.ibm.com) * * This library is free software; you can redistribute it and/or modify Loading Loading @@ -321,6 +321,7 @@ struct mid_q_entry { __u8 command; /* smb command code */ unsigned multiPart:1; /* multiple responses to one SMB request */ unsigned largeBuf:1; /* if valid response, is pointer to large buf */ unsigned multiResp:1 /* multiple trans2 responses for one request */ }; struct oplock_q_entry { Loading
fs/cifs/connect.c +25 −6 Original line number Diff line number Diff line Loading @@ -365,14 +365,30 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server) length = kernel_recvmsg(csocket, &smb_msg, &iov, 1, pdu_length - total_read, 0); if (length == 0) { if((server->tcpStatus == CifsExiting) || (length == -EINTR)) { /* then will exit */ goto dmx_loop_end; } else if (server->tcpStatus == CifsNeedReconnect) { cifs_reconnect(server); csocket = server->ssocket; /* Reconnect wakes up rspns q */ /* Now we will reread sock */ goto dmx_loop_end; } else if ((length == -ERESTARTSYS) || (length == -EAGAIN)) { msleep(1); /* minimum sleep to prevent looping allowing socket to clear and app threads to set tcpStatus CifsNeedReconnect if server hung */ continue; } else if (length <= 0) { cERROR(1, ("Zero length receive when expecting %d ", ("Received no data, expecting %d", pdu_length - total_read)); cifs_reconnect(server); csocket = server->ssocket; wake_up(&server->response_q); continue; goto dmx_loop_end; } } length += 4; /* account for rfc1002 hdr */ Loading Loading @@ -434,6 +450,9 @@ cifs_demultiplex_thread(struct TCP_Server_Info *server) wake_up(&server->response_q); continue; } dmx_loop_end: cFYI(1,("Exiting cifsd loop")); } spin_lock(&GlobalMid_Lock); server->tcpStatus = CifsExiting; Loading