xprtrdma: Warn when there are orphaned IB objects
WARN during transport destruction if ib_dealloc_pd() fails. This is a sign that xprtrdma orphaned one or more RDMA API objects at some point, which can pin lower layer kernel modules and cause shutdown to hang. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Steve Wise <swise@opengridcomputing.com> Reviewed-by: Sagi Grimberg <sagig@mellanox.com> Reviewed-by: Devesh Sharma <devesh.sharma@avagotech.com> Tested-By: Devesh Sharma <devesh.sharma@avagotech.com> Reviewed-by: Doug Ledford <dledford@redhat.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
d4a4f75cd8
commit
6d44698d54
|
@ -702,17 +702,17 @@ rpcrdma_ia_close(struct rpcrdma_ia *ia)
|
|||
dprintk("RPC: %s: ib_dereg_mr returned %i\n",
|
||||
__func__, rc);
|
||||
}
|
||||
|
||||
if (ia->ri_id != NULL && !IS_ERR(ia->ri_id)) {
|
||||
if (ia->ri_id->qp)
|
||||
rdma_destroy_qp(ia->ri_id);
|
||||
rdma_destroy_id(ia->ri_id);
|
||||
ia->ri_id = NULL;
|
||||
}
|
||||
if (ia->ri_pd != NULL && !IS_ERR(ia->ri_pd)) {
|
||||
rc = ib_dealloc_pd(ia->ri_pd);
|
||||
dprintk("RPC: %s: ib_dealloc_pd returned %i\n",
|
||||
__func__, rc);
|
||||
}
|
||||
|
||||
/* If the pd is still busy, xprtrdma missed freeing a resource */
|
||||
if (ia->ri_pd && !IS_ERR(ia->ri_pd))
|
||||
WARN_ON(ib_dealloc_pd(ia->ri_pd));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue