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);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to