svn commit: r303513 - head/sys/ofed/drivers/infiniband/ulp/sdp

Mark Johnston markj at FreeBSD.org
Fri Jul 29 21:03:03 UTC 2016


Author: markj
Date: Fri Jul 29 21:03:02 2016
New Revision: 303513
URL: https://svnweb.freebsd.org/changeset/base/303513

Log:
  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

Modified:
  head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c

Modified: head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c	Fri Jul 29 21:01:04 2016	(r303512)
+++ head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c	Fri Jul 29 21:03:02 2016	(r303513)
@@ -160,7 +160,10 @@ sdp_pcbbind(struct sdp_sock *ssk, struct
 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);


More information about the svn-src-head mailing list