xprtrdma: disconnect and flush cqs before freeing buffers
authorSteve Wise <swise@opengridcomputing.com>
Mon, 21 Sep 2015 17:24:23 +0000 (12:24 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Mon, 28 Sep 2015 14:42:35 +0000 (10:42 -0400)
commit72c021738252dde5849d575a650239d6404930ee
treefc04648367b5531aa8e2fa0f46492953c0e1454a
parentd0f36c46deea97bd16b9277be2f1acac74d76037
xprtrdma: disconnect and flush cqs before freeing buffers

Otherwise a FRMR completion can cause a touch-after-free crash.

In xprt_rdma_destroy(), call rpcrdma_buffer_destroy() only after calling
rpcrdma_ep_destroy().

In rpcrdma_ep_destroy(), disconnect the cm_id first which should flush the
qp, then drain the cqs, then destroy the qp, and finally destroy the cqs.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Tested-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/transport.c
net/sunrpc/xprtrdma/verbs.c