diff options
author | Steve French <sfrench@us.ibm.com> | 2006-07-14 18:37:11 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2006-08-11 17:27:07 -0400 |
commit | 3a5ff61c18659443f76bad6cf06f60103046de5d (patch) | |
tree | 541e341724b50b11c598c9790370d460f189586b /fs/cifs/transport.c | |
parent | 9f737633e6ee54fc174282d49b2559bd2208391d (diff) |
[CIFS] Do not time out posix brl requests when using new posix setfileinfo
request and do not time out slow requests to a server that is still responding
well to other threads
Suggested by jra of Samba team
Signed-off-by: Steve French <sfrench@us.ibm.com>
(cherry picked from 89b57148115479eef074b8d3f86c4c86c96ac969 commit)
Diffstat (limited to 'fs/cifs/transport.c')
-rw-r--r-- | fs/cifs/transport.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c index 17ba329e2b3d..95e23ca670a8 100644 --- a/fs/cifs/transport.c +++ b/fs/cifs/transport.c | |||
@@ -444,8 +444,9 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, | |||
444 | if(timeout != MAX_SCHEDULE_TIMEOUT) { | 444 | if(timeout != MAX_SCHEDULE_TIMEOUT) { |
445 | timeout += jiffies; | 445 | timeout += jiffies; |
446 | wait_event(ses->server->response_q, | 446 | wait_event(ses->server->response_q, |
447 | (!(midQ->midState & MID_REQUEST_SUBMITTED)) || | 447 | (!(midQ->midState & MID_REQUEST_SUBMITTED)) || |
448 | time_after(jiffies, timeout) || | 448 | (time_after(jiffies, timeout) && |
449 | time_after(jiffies, ses->server->lstrp + HZ)) || | ||
449 | ((ses->server->tcpStatus != CifsGood) && | 450 | ((ses->server->tcpStatus != CifsGood) && |
450 | (ses->server->tcpStatus != CifsNew))); | 451 | (ses->server->tcpStatus != CifsNew))); |
451 | } else { | 452 | } else { |
@@ -710,9 +711,18 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses, | |||
710 | /* No user interrupts in wait - wreaks havoc with performance */ | 711 | /* No user interrupts in wait - wreaks havoc with performance */ |
711 | if(timeout != MAX_SCHEDULE_TIMEOUT) { | 712 | if(timeout != MAX_SCHEDULE_TIMEOUT) { |
712 | timeout += jiffies; | 713 | timeout += jiffies; |
714 | /* although we prefer not to time out if the server is still | ||
715 | responding - we will time out if the server takes | ||
716 | more than 15 (or 45 or 180) seconds to respond to this request | ||
717 | and has not responded to any request from other threads | ||
718 | on this client within a second (note that it is not worth | ||
719 | grabbing the GlobalMid_Lock and slowing things down in this | ||
720 | wait event to more accurately check the lstrsp field on some | ||
721 | arch since we are already in an error path that will retry */ | ||
713 | wait_event(ses->server->response_q, | 722 | wait_event(ses->server->response_q, |
714 | (!(midQ->midState & MID_REQUEST_SUBMITTED)) || | 723 | (!(midQ->midState & MID_REQUEST_SUBMITTED)) || |
715 | time_after(jiffies, timeout) || | 724 | (time_after(jiffies, timeout) && |
725 | time_after(jiffies, ses->server->lstrp + HZ)) || | ||
716 | ((ses->server->tcpStatus != CifsGood) && | 726 | ((ses->server->tcpStatus != CifsGood) && |
717 | (ses->server->tcpStatus != CifsNew))); | 727 | (ses->server->tcpStatus != CifsNew))); |
718 | } else { | 728 | } else { |