linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 1/3] svcrdma: Fix another Receive buffer leak
@ 2020-07-26 20:59 Chuck Lever
  2020-07-26 20:59 ` [PATCH v1 2/3] svcrdma: Remove transport reference counting Chuck Lever
  2020-07-26 20:59 ` [PATCH v1 3/3] svcrdma: CM event handler clean up Chuck Lever
  0 siblings, 2 replies; 3+ messages in thread
From: Chuck Lever @ 2020-07-26 20:59 UTC (permalink / raw)
  To: linux-nfs, linux-rdma

During a connection tear down, the Receive queue is flushed before
the device resources are freed. Typically, all the Receives flush
with IB_WR_FLUSH_ERR.

However, any pending successful Receives flush with IB_WR_SUCCESS,
and the server automatically posts a fresh Receive to replace the
completing one. This happens even after the connection has closed
and the RQ is drained. Receives that are posted after the RQ is
drained appear never to complete, causing a Receive resource leak.
The leaked Receive buffer is left DMA-mapped.

To prevent these late-posted recv_ctxt's from leaking, block new
Receive posting after XPT_CLOSE is set.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 net/sunrpc/xprtrdma/svc_rdma_recvfrom.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
index d5ec85cb652c..5bb97b5f4606 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
@@ -275,6 +275,8 @@ static int svc_rdma_post_recv(struct svcxprt_rdma *rdma)
 {
 	struct svc_rdma_recv_ctxt *ctxt;
 
+	if (test_bit(XPT_CLOSE, &rdma->sc_xprt.xpt_flags))
+		return 0;
 	ctxt = svc_rdma_recv_ctxt_get(rdma);
 	if (!ctxt)
 		return -ENOMEM;



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-07-26 20:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-26 20:59 [PATCH v1 1/3] svcrdma: Fix another Receive buffer leak Chuck Lever
2020-07-26 20:59 ` [PATCH v1 2/3] svcrdma: Remove transport reference counting Chuck Lever
2020-07-26 20:59 ` [PATCH v1 3/3] svcrdma: CM event handler clean up Chuck Lever

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).