* [PATCH]rpc client can not deal with ENOSOCK, so translate it into ENOCONN
@ 2010-03-06 3:46 Bian Naimeng
[not found] ` <1267885392.4688.5.camel@localhost.localdomain>
0 siblings, 1 reply; 4+ messages in thread
From: Bian Naimeng @ 2010-03-06 3:46 UTC (permalink / raw)
To: Trond.Myklebust; +Cc: linux-nfs, J. Bruce Fields
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 translate it into ENOCONN.
Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
---
net/sunrpc/xprtsock.c | 18 ++++++++----------
1 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 3d739e5..45e5fd8 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -549,14 +549,13 @@ 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)
+ if (!transport->sock || status == -ENOTSOCK) {
+ /* Should we call xs_close() here? */
+ status = -ENOTCONN;
goto out;
+ }
switch (status) {
- case -ENOTSOCK:
- status = -ENOTCONN;
- /* Should we call xs_close() here? */
- break;
case -EAGAIN:
status = xs_nospace(task);
break;
@@ -652,14 +651,13 @@ static int xs_tcp_send_request(struct rpc_task *task)
status = -EAGAIN;
break;
}
- if (!transport->sock)
+ if (!transport->sock || status == -ENOTSOCK) {
+ /* Should we call xs_close() here? */
+ status = -ENOTCONN;
goto out;
+ }
switch (status) {
- case -ENOTSOCK:
- status = -ENOTCONN;
- /* Should we call xs_close() here? */
- break;
case -EAGAIN:
status = xs_nospace(task);
break;
--
1.6.4
^ permalink raw reply related [flat|nested] 4+ messages in thread[parent not found: <1267885392.4688.5.camel@localhost.localdomain>]
[parent not found: <1267885392.4688.5.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>]
* Re: [PATCH]rpc client can not deal with ENOSOCK, so translate it into ENOCONN [not found] ` <1267885392.4688.5.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org> @ 2010-03-08 1:13 ` Bian Naimeng 2010-03-08 1:13 ` [PATCH][V2]rpc " Bian Naimeng 1 sibling, 0 replies; 4+ messages in thread From: Bian Naimeng @ 2010-03-08 1:13 UTC (permalink / raw) To: Trond Myklebust; +Cc: linux-nfs, J. Bruce Fields Trond Myklebust =8E=CA=93=B9: > On Sat, 2010-03-06 at 11:46 +0800, Bian Naimeng wrote:=20 >> 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 translate it into EN= OCONN. >> >> Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com> >> >> --- =2E.. snip... >> - if (!transport->sock) >> + if (!transport->sock || status =3D=3D -ENOTSOCK) { >> + /* Should we call xs_close() here? */ >> + status =3D -ENOTCONN; >> goto out; >> + } >> =20 >> switch (status) { >> - case -ENOTSOCK: >> - status =3D -ENOTCONN; >> - /* Should we call xs_close() here? */ >> - break; >> case -EAGAIN: >> status =3D xs_nospace(task); >> break; >=20 > The only case where xs_sendpages() will return ENOTSOCK is if > transport->sock =3D=3D NULL, so the correct fix here is to just remov= e that > redundant test. There is no need to move the test for ENOTSOCK out of > the switch statement. Yes. Thanks for your suggestion. Best Regards Bian >=20 > Cheers > Trond ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH][V2]rpc client can not deal with ENOSOCK, so translate it into ENOCONN [not found] ` <1267885392.4688.5.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org> 2010-03-08 1:13 ` Bian Naimeng @ 2010-03-08 1:13 ` Bian Naimeng 2010-03-08 6:49 ` [PATCH][V3]rpc " Bian Naimeng 1 sibling, 1 reply; 4+ messages in thread From: Bian Naimeng @ 2010-03-08 1:13 UTC (permalink / raw) To: Trond Myklebust; +Cc: linux-nfs, J. Bruce Fields 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> --- net/sunrpc/xprtsock.c | 4 ---- 1 files changed, 0 insertions(+), 4 deletions(-) diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 3d739e5..9b9e653 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -549,8 +549,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: @@ -652,8 +650,6 @@ static int xs_tcp_send_request(struct rpc_task *task) status = -EAGAIN; break; } - if (!transport->sock) - goto out; switch (status) { case -ENOTSOCK: -- 1.6.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH][V3]rpc client can not deal with ENOSOCK, so translate it into ENOCONN 2010-03-08 1:13 ` [PATCH][V2]rpc " Bian Naimeng @ 2010-03-08 6:49 ` Bian Naimeng 0 siblings, 0 replies; 4+ messages in thread From: Bian Naimeng @ 2010-03-08 6:49 UTC (permalink / raw) To: Trond Myklebust; +Cc: linux-nfs, J. Bruce Fields Sorry, I need remove the unused lable "out:". --- 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> --- net/sunrpc/xprtsock.c | 8 ++------ 1 files changed, 2 insertions(+), 6 deletions(-) diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 3d739e5..df82795 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -549,8 +549,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: @@ -570,7 +568,7 @@ static int xs_udp_send_request(struct rpc_task *task) * prompts ECONNREFUSED. */ clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags); } -out: + return status; } @@ -652,8 +650,6 @@ static int xs_tcp_send_request(struct rpc_task *task) status = -EAGAIN; break; } - if (!transport->sock) - goto out; switch (status) { case -ENOTSOCK: @@ -673,7 +669,7 @@ static int xs_tcp_send_request(struct rpc_task *task) case -ENOTCONN: clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags); } -out: + return status; } -- 1.6.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-03-08 6:49 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-06 3:46 [PATCH]rpc client can not deal with ENOSOCK, so translate it into ENOCONN Bian Naimeng
[not found] ` <1267885392.4688.5.camel@localhost.localdomain>
[not found] ` <1267885392.4688.5.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2010-03-08 1:13 ` Bian Naimeng
2010-03-08 1:13 ` [PATCH][V2]rpc " Bian Naimeng
2010-03-08 6:49 ` [PATCH][V3]rpc " Bian Naimeng
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox