* [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
* 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