Message ID | 169695862158.5083.6004887085023503434.stgit@oracle-102.nfsv4bat.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v1] svcrdma: Drop connection after an RDMA Read error | expand |
On 10/10/2023 1:23 PM, Chuck Lever wrote: > From: Chuck Lever <chuck.lever@oracle.com> > > When an RPC Call message cannot be pulled from the client, that > is a message loss, by definition. Close the connection to trigger > the client to resend. This looks correct, but it seems there are actually two changes here, it's initiating the close but it's also unconditionally returning -ENOTCONN. Other similar code paths do this so it's ok but the altered return value is a bit mysterious. Reviewed-by: Tom Talpey <tom@talpey.com> > > Cc: <stable@vger.kernel.org> > Signed-off-by: Chuck Lever <chuck.lever@oracle.com> > --- > net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c > index 85c8bcaebb80..3b05f90a3e50 100644 > --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c > +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c > @@ -852,7 +852,8 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) > if (ret == -EINVAL) > svc_rdma_send_error(rdma_xprt, ctxt, ret); > svc_rdma_recv_ctxt_put(rdma_xprt, ctxt); > - return ret; > + svc_xprt_deferred_close(xprt); > + return -ENOTCONN; > > out_backchannel: > svc_rdma_handle_bc_reply(rqstp, ctxt); > > >
> On Oct 12, 2023, at 8:23 PM, Tom Talpey <tom@talpey.com> wrote: > > On 10/10/2023 1:23 PM, Chuck Lever wrote: >> From: Chuck Lever <chuck.lever@oracle.com> >> When an RPC Call message cannot be pulled from the client, that >> is a message loss, by definition. Close the connection to trigger >> the client to resend. > > This looks correct, but it seems there are actually two changes here, > it's initiating the close but it's also unconditionally returning > -ENOTCONN. Other similar code paths do this so it's ok but the > altered return value is a bit mysterious. It's conventional for transport top level methods to return -ENOTCONN if the connection is closing or closed. > Reviewed-by: Tom Talpey <tom@talpey.com> Thanks! >> Cc: <stable@vger.kernel.org> >> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> >> --- >> net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c >> index 85c8bcaebb80..3b05f90a3e50 100644 >> --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c >> +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c >> @@ -852,7 +852,8 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) >> if (ret == -EINVAL) >> svc_rdma_send_error(rdma_xprt, ctxt, ret); >> svc_rdma_recv_ctxt_put(rdma_xprt, ctxt); >> - return ret; >> + svc_xprt_deferred_close(xprt); >> + return -ENOTCONN; >> out_backchannel: >> svc_rdma_handle_bc_reply(rqstp, ctxt); -- Chuck Lever
diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c index 85c8bcaebb80..3b05f90a3e50 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c @@ -852,7 +852,8 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) if (ret == -EINVAL) svc_rdma_send_error(rdma_xprt, ctxt, ret); svc_rdma_recv_ctxt_put(rdma_xprt, ctxt); - return ret; + svc_xprt_deferred_close(xprt); + return -ENOTCONN; out_backchannel: svc_rdma_handle_bc_reply(rqstp, ctxt);