Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff79c74d authored by Shirley Ma's avatar Shirley Ma Committed by J. Bruce Fields
Browse files

NFS/RDMA Release resources in svcrdma when device is removed

When removing underlying RDMA device, the rmmod will hang forever if there
are any outstanding NFS/RDMA client mounts. The outstanding NFS/RDMA counts
could also prevent the server from shutting down. Further debugging shows
that the existing connections are not teared down and resource are not
released when receiving RDMA_CM_EVENT_DEVICE_REMOVAL event. It seems the
original code missing svc_xprt_put() in RDMA_CM_EVENT_REMOVAL event handler
thus svc_xprt_free is never invoked to release the existing connection
resources.

The patch has been passed removing, adding device back and forth without
stopping NFS/RDMA service. This will also allow a device to be unplugged
and swapped out without shutting down NFS service.

BugLink: https://bugzilla.linux-nfs.org/show_bug.cgi?id=252


Signed-off-by: default avatarShirley Ma <shirley.ma@oracle.com>
Reviewed-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 7b8f4586
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -659,6 +659,7 @@ static int rdma_cma_handler(struct rdma_cm_id *cma_id,
		if (xprt) {
		if (xprt) {
			set_bit(XPT_CLOSE, &xprt->xpt_flags);
			set_bit(XPT_CLOSE, &xprt->xpt_flags);
			svc_xprt_enqueue(xprt);
			svc_xprt_enqueue(xprt);
			svc_xprt_put(xprt);
		}
		}
		break;
		break;
	default:
	default: