summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2009-03-11 20:29:24 +0100
committerTrond Myklebust <Trond.Myklebust@netapp.com>2009-03-19 20:17:36 +0100
commit55420c24a0d4d1fce70ca713f84aa00b6b74a70e (patch)
tree9e7e931122cb77e7ae1249b6dde81d83f60a894d /net
parentSUNRPC: xs_tcp_connect_worker{4,6}: merge common code (diff)
downloadlinux-55420c24a0d4d1fce70ca713f84aa00b6b74a70e.tar.xz
linux-55420c24a0d4d1fce70ca713f84aa00b6b74a70e.zip
SUNRPC: Ensure we close the socket on EPIPE errors too...
As long as one task is holding the socket lock, then calls to xprt_force_disconnect(xprt) will not succeed in shutting down the socket. In particular, this would mean that a server initiated shutdown will not succeed until the lock is relinquished. In order to avoid the deadlock, we should ensure that xs_tcp_send_request() closes the socket on EPIPE errors too. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net')
-rw-r--r--net/sunrpc/xprtsock.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index f05a56e597ef..fbc8725c20cb 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -726,10 +726,10 @@ static int xs_tcp_send_request(struct rpc_task *task)
dprintk("RPC: sendmsg returned unrecognized error %d\n",
-status);
case -ECONNRESET:
+ case -EPIPE:
xs_tcp_shutdown(xprt);
case -ECONNREFUSED:
case -ENOTCONN:
- case -EPIPE:
clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
}
out: