| From e1ede312f17e96a9c5cda9aaa1cdcf442c1a5da8 Mon Sep 17 00:00:00 2001 |
| From: Chuck Lever <chuck.lever@oracle.com> |
| Date: Tue, 9 Apr 2019 17:04:09 -0400 |
| Subject: xprtrdma: Fix helper that drains the transport |
| |
| From: Chuck Lever <chuck.lever@oracle.com> |
| |
| commit e1ede312f17e96a9c5cda9aaa1cdcf442c1a5da8 upstream. |
| |
| We want to drain only the RQ first. Otherwise the transport can |
| deadlock on ->close if there are outstanding Send completions. |
| |
| Fixes: 6d2d0ee27c7a ("xprtrdma: Replace rpcrdma_receive_wq ... ") |
| Signed-off-by: Chuck Lever <chuck.lever@oracle.com> |
| Cc: stable@vger.kernel.org # v5.0+ |
| Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/sunrpc/xprtrdma/verbs.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/sunrpc/xprtrdma/verbs.c |
| +++ b/net/sunrpc/xprtrdma/verbs.c |
| @@ -90,7 +90,7 @@ static void rpcrdma_xprt_drain(struct rp |
| /* Flush Receives, then wait for deferred Reply work |
| * to complete. |
| */ |
| - ib_drain_qp(ia->ri_id->qp); |
| + ib_drain_rq(ia->ri_id->qp); |
| drain_workqueue(buf->rb_completion_wq); |
| |
| /* Deferred Reply processing might have scheduled |