30 lines
1.2 KiB
Diff
30 lines
1.2 KiB
Diff
From 3848ddd6068c425b732da6e8c78b047ed28c6114 Mon Sep 17 00:00:00 2001
|
|
From: Chuck Lever <chuck.lever@oracle.com>
|
|
Date: Sun, 27 Apr 2025 12:39:59 -0400
|
|
Subject: svcrdma: Unregister the device if svc_rdma_accept() fails
|
|
|
|
To handle device removal, svc_rdma_accept() requests removal
|
|
notification for the underlying device when accepting a connection.
|
|
However svc_rdma_free() is not invoked if svc_rdma_accept() fails.
|
|
There needs to be a matching "unregister" in that case; otherwise
|
|
the device cannot be removed.
|
|
|
|
Fixes: c4de97f7c454 ("svcrdma: Handle device removal outside of the CM event handler")
|
|
Cc: stable@vger.kernel.org
|
|
Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
|
|
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
|
|
---
|
|
net/sunrpc/xprtrdma/svc_rdma_transport.c | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
--- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
|
|
+++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
|
|
@@ -575,6 +575,7 @@ static struct svc_xprt *svc_rdma_accept(
|
|
if (newxprt->sc_qp && !IS_ERR(newxprt->sc_qp))
|
|
ib_destroy_qp(newxprt->sc_qp);
|
|
rdma_destroy_id(newxprt->sc_cm_id);
|
|
+ rpcrdma_rn_unregister(dev, &newxprt->sc_rn);
|
|
/* This call to put will destroy the transport */
|
|
svc_xprt_put(&newxprt->sc_xprt);
|
|
return NULL;
|