Commit 750037aa authored by Olga Kornievskaia's avatar Olga Kornievskaia Committed by Chuck Lever
Browse files

svcrdma: do not unregister device for listeners



On an rdma-capable machine, a start/stop/start and then on a stop of
a knfsd server would lead kref underflow warning because svc_rdma_free
would indiscriminately unregister the rdma device but a listening
transport never calls the rdma_rn_register() thus leading to kref
going down to 0 on the 1st stop of the server and on the 2nd stop
it leads to a problem.

Suggested-by: default avatarChuck Lever <chuck.lever@oracle.com>
Fixes: c4de97f7 ("svcrdma: Handle device removal outside of the CM event handler")
Signed-off-by: default avatarOlga Kornievskaia <okorniev@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 930b64ca
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -621,6 +621,7 @@ static void __svc_rdma_free(struct work_struct *work)
	/* Destroy the CM ID */
	rdma_destroy_id(rdma->sc_cm_id);

	if (!test_bit(XPT_LISTENER, &rdma->sc_xprt.xpt_flags))
		rpcrdma_rn_unregister(device, &rdma->sc_rn);
	kfree(rdma);
}