sdp: Destroy the RDMA ID after destroying the connection's queue pair.

This is the ordering documented by rdma_destroy_qp(). Also add a useful
KASSERT to sdp_pcbfree().

Sponsored by:	EMC / Isilon Storage Division
This commit is contained in:
Mark Johnston 2016-07-29 21:03:02 +00:00
parent d3461164e0
commit adaf3c4906
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=303513

View File

@ -160,7 +160,10 @@ sdp_pcbbind(struct sdp_sock *ssk, struct sockaddr *nam, struct ucred *cred)
static void
sdp_pcbfree(struct sdp_sock *ssk)
{
KASSERT(ssk->socket == NULL, ("ssk %p socket still attached", ssk));
KASSERT((ssk->flags & SDP_DESTROY) == 0,
("ssk %p already destroyed", ssk));
sdp_dbg(ssk->socket, "Freeing pcb");
SDP_WLOCK_ASSERT(ssk);
@ -171,7 +174,6 @@ sdp_pcbfree(struct sdp_sock *ssk)
LIST_REMOVE(ssk, list);
SDP_LIST_WUNLOCK();
crfree(ssk->cred);
sdp_destroy_cma(ssk);
ssk->qp_active = 0;
if (ssk->qp) {
ib_destroy_qp(ssk->qp);
@ -179,6 +181,7 @@ sdp_pcbfree(struct sdp_sock *ssk)
}
sdp_tx_ring_destroy(ssk);
sdp_rx_ring_destroy(ssk);
sdp_destroy_cma(ssk);
rw_destroy(&ssk->rx_ring.destroyed_lock);
rw_destroy(&ssk->lock);
uma_zfree(sdp_zone, ssk);