]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/rds/ib_cm.c
Merge tag 'libnvdimm-for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm...
[karo-tx-linux.git] / net / rds / ib_cm.c
index 0da2a45b33bd8ee5df6915e253440d3bc65081fc..d150bb4aa3cb913510f704959e4aac4004710909 100644 (file)
@@ -135,7 +135,7 @@ void rds_ib_cm_connect_complete(struct rds_connection *conn, struct rdma_cm_even
        rds_ib_recv_init_ring(ic);
        /* Post receive buffers - as a side effect, this will update
         * the posted credit count. */
-       rds_ib_recv_refill(conn, 1);
+       rds_ib_recv_refill(conn, 1, GFP_KERNEL);
 
        /* Tune RNR behavior */
        rds_ib_tune_rnr(ic, &qp_attr);
@@ -448,8 +448,9 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
                 (unsigned long long)be64_to_cpu(lguid),
                 (unsigned long long)be64_to_cpu(fguid));
 
-       conn = rds_conn_create(dp->dp_daddr, dp->dp_saddr, &rds_ib_transport,
-                              GFP_KERNEL);
+       /* RDS/IB is not currently netns aware, thus init_net */
+       conn = rds_conn_create(&init_net, dp->dp_daddr, dp->dp_saddr,
+                              &rds_ib_transport, GFP_KERNEL);
        if (IS_ERR(conn)) {
                rdsdebug("rds_conn_create failed (%ld)\n", PTR_ERR(conn));
                conn = NULL;
@@ -639,6 +640,15 @@ void rds_ib_conn_shutdown(struct rds_connection *conn)
                           (atomic_read(&ic->i_signaled_sends) == 0));
                tasklet_kill(&ic->i_recv_tasklet);
 
+               /* first destroy the ib state that generates callbacks */
+               if (ic->i_cm_id->qp)
+                       rdma_destroy_qp(ic->i_cm_id);
+               if (ic->i_send_cq)
+                       ib_destroy_cq(ic->i_send_cq);
+               if (ic->i_recv_cq)
+                       ib_destroy_cq(ic->i_recv_cq);
+
+               /* then free the resources that ib callbacks use */
                if (ic->i_send_hdrs)
                        ib_dma_free_coherent(dev,
                                           ic->i_send_ring.w_nr *
@@ -662,12 +672,6 @@ void rds_ib_conn_shutdown(struct rds_connection *conn)
                if (ic->i_recvs)
                        rds_ib_recv_clear_ring(ic);
 
-               if (ic->i_cm_id->qp)
-                       rdma_destroy_qp(ic->i_cm_id);
-               if (ic->i_send_cq)
-                       ib_destroy_cq(ic->i_send_cq);
-               if (ic->i_recv_cq)
-                       ib_destroy_cq(ic->i_recv_cq);
                rdma_destroy_id(ic->i_cm_id);
 
                /*