svcrdma: Drain QP before freeing svcrdma_xprt
If the server has forced a disconnect, the associated QP has not been moved to the Error state, and thus Receives are still posted. Ensure Receives (and any other outstanding WRs) are drained to release resources that can be freed during teardown of the svcrdma_xprt. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
0319aafc95
commit
76ee8fd64a
|
@ -1180,6 +1180,9 @@ static void __svc_rdma_free(struct work_struct *work)
|
||||||
|
|
||||||
dprintk("svcrdma: %s(%p)\n", __func__, rdma);
|
dprintk("svcrdma: %s(%p)\n", __func__, rdma);
|
||||||
|
|
||||||
|
if (rdma->sc_qp && !IS_ERR(rdma->sc_qp))
|
||||||
|
ib_drain_qp(rdma->sc_qp);
|
||||||
|
|
||||||
/* We should only be called from kref_put */
|
/* We should only be called from kref_put */
|
||||||
if (atomic_read(&xprt->xpt_ref.refcount) != 0)
|
if (atomic_read(&xprt->xpt_ref.refcount) != 0)
|
||||||
pr_err("svcrdma: sc_xprt still in use? (%d)\n",
|
pr_err("svcrdma: sc_xprt still in use? (%d)\n",
|
||||||
|
|
Loading…
Reference in New Issue