aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBian Naimeng <biannm@cn.fujitsu.com>2010-03-08 14:49:01 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-02-13 11:28:49 -0800
commit607ca4f51d6c4e7bec6d78f0a211476dae5552fc (patch)
tree1c51586e62d0cfd2d1c14fdd05959a17dc9f0e24
parent3f81517baeb07ebfbbf9f1d73adc106a12e5cb3e (diff)
downloadxen-607ca4f51d6c4e7bec6d78f0a211476dae5552fc.tar.gz
rpc client can not deal with ENOSOCK, so translate it into ENOCONN
commit 5fe46e9d733f19a880ef7e516002bd4c2b833e14 upstream. If NFSv4 client send a request before connect, or the old connection was broken because a ETIMEOUT error catched by call_status, ->send_request will return ENOSOCK, but rpc layer can not deal with it, so make sure ->send_request can translate ENOSOCK into ENOCONN. Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Cc: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--net/sunrpc/xprtsock.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 683c99dda0091..d37f07c8179fa 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -563,8 +563,6 @@ static int xs_udp_send_request(struct rpc_task *task)
/* Still some bytes left; set up for a retry later. */
status = -EAGAIN;
}
- if (!transport->sock)
- goto out;
switch (status) {
case -ENOTSOCK:
@@ -584,7 +582,7 @@ static int xs_udp_send_request(struct rpc_task *task)
* prompts ECONNREFUSED. */
clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
}
-out:
+
return status;
}
@@ -666,8 +664,6 @@ static int xs_tcp_send_request(struct rpc_task *task)
status = -EAGAIN;
break;
}
- if (!transport->sock)
- goto out;
switch (status) {
case -ENOTSOCK:
@@ -687,7 +683,7 @@ static int xs_tcp_send_request(struct rpc_task *task)
case -ENOTCONN:
clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags);
}
-out:
+
return status;
}