IB/iser: Use ib_drain_sq()
authorSteve Wise <swise@opengridcomputing.com>
Wed, 17 Feb 2016 16:17:12 +0000 (08:17 -0800)
committerDoug Ledford <dledford@redhat.com>
Mon, 29 Feb 2016 22:10:27 +0000 (17:10 -0500)
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/ulp/iser/iscsi_iser.h
drivers/infiniband/ulp/iser/iser_initiator.c
drivers/infiniband/ulp/iser/iser_verbs.c

index 95f0a64e076b9addc5b01fc17e268f211c9e6f04..0351059783b1297c133a263a44bb137e317b2566 100644 (file)
@@ -458,9 +458,6 @@ struct iser_fr_pool {
  * @comp:                iser completion context
  * @fr_pool:             connection fast registration poool
  * @pi_support:          Indicate device T10-PI support
- * @last:                last send wr to signal all flush errors were drained
- * @last_cqe:            cqe handler for last wr
- * @last_comp:           completes when all connection completions consumed
  */
 struct ib_conn {
        struct rdma_cm_id           *cma_id;
@@ -472,10 +469,7 @@ struct ib_conn {
        struct iser_comp            *comp;
        struct iser_fr_pool          fr_pool;
        bool                         pi_support;
-       struct ib_send_wr            last;
-       struct ib_cqe                last_cqe;
        struct ib_cqe                reg_cqe;
-       struct completion            last_comp;
 };
 
 /**
@@ -617,7 +611,6 @@ void iser_cmd_comp(struct ib_cq *cq, struct ib_wc *wc);
 void iser_ctrl_comp(struct ib_cq *cq, struct ib_wc *wc);
 void iser_dataout_comp(struct ib_cq *cq, struct ib_wc *wc);
 void iser_reg_comp(struct ib_cq *cq, struct ib_wc *wc);
-void iser_last_comp(struct ib_cq *cq, struct ib_wc *wc);
 
 void iser_task_rdma_init(struct iscsi_iser_task *task);
 
index ed54b388e7adca899bfaec181c2f4c2ba75b1f47..81ae2e30dd12540cdfeb41538b90676c81ee590c 100644 (file)
@@ -729,13 +729,6 @@ void iser_dataout_comp(struct ib_cq *cq, struct ib_wc *wc)
        kmem_cache_free(ig.desc_cache, desc);
 }
 
-void iser_last_comp(struct ib_cq *cq, struct ib_wc *wc)
-{
-       struct ib_conn *ib_conn = wc->qp->qp_context;
-
-       complete(&ib_conn->last_comp);
-}
-
 void iser_task_rdma_init(struct iscsi_iser_task *iser_task)
 
 {
index 40c0f4978e2f00b5173001f54ec41a4bc651b839..47e1159c07c2d90bff670ff4cd128cf02ab4802f 100644 (file)
@@ -663,7 +663,6 @@ void iser_conn_release(struct iser_conn *iser_conn)
 int iser_conn_terminate(struct iser_conn *iser_conn)
 {
        struct ib_conn *ib_conn = &iser_conn->ib_conn;
-       struct ib_send_wr *bad_wr;
        int err = 0;
 
        /* terminate the iser conn only if the conn state is UP */
@@ -688,14 +687,8 @@ int iser_conn_terminate(struct iser_conn *iser_conn)
                        iser_err("Failed to disconnect, conn: 0x%p err %d\n",
                                 iser_conn, err);
 
-               /* post an indication that all flush errors were consumed */
-               err = ib_post_send(ib_conn->qp, &ib_conn->last, &bad_wr);
-               if (err) {
-                       iser_err("conn %p failed to post last wr", ib_conn);
-                       return 1;
-               }
-
-               wait_for_completion(&ib_conn->last_comp);
+               /* block until all flush errors are consumed */
+               ib_drain_sq(ib_conn->qp);
        }
 
        return 1;
@@ -954,10 +947,6 @@ void iser_conn_init(struct iser_conn *iser_conn)
 
        ib_conn->post_recv_buf_count = 0;
        ib_conn->reg_cqe.done = iser_reg_comp;
-       ib_conn->last_cqe.done = iser_last_comp;
-       ib_conn->last.wr_cqe = &ib_conn->last_cqe;
-       ib_conn->last.opcode = IB_WR_SEND;
-       init_completion(&ib_conn->last_comp);
 }
 
  /**