IB/isert: Accept RDMA_WRITE completions
authorSagi Grimberg <sagig@mellanox.com>
Wed, 19 Feb 2014 15:50:24 +0000 (17:50 +0200)
committerNicholas Bellinger <nab@linux-iscsi.org>
Mon, 7 Apr 2014 08:48:46 +0000 (01:48 -0700)
In case of protected transactions, we will need to check the
protection status of the transaction before sending SCSI response.
So be ready for RDMA_WRITE completions. currently we don't ask
for these completions, but for T10-PI we will.

Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/infiniband/ulp/isert/ib_isert.c

index 72063147933cdbc7e8e89d785bf24fb235219aa8..2eb07b943ed917230e9bc1d087ff62c8e420a12a 100644 (file)
@@ -51,6 +51,8 @@ isert_unreg_rdma(struct isert_cmd *isert_cmd, struct isert_conn *isert_conn);
 static int
 isert_reg_rdma(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
               struct isert_rdma_wr *wr);
+static int
+isert_put_response(struct iscsi_conn *conn, struct iscsi_cmd *cmd);
 
 static void
 isert_qp_event_callback(struct ib_event *e, void *context)
@@ -1651,6 +1653,18 @@ isert_completion_put(struct iser_tx_desc *tx_desc, struct isert_cmd *isert_cmd,
        isert_put_cmd(isert_cmd);
 }
 
+static void
+isert_completion_rdma_write(struct iser_tx_desc *tx_desc,
+                           struct isert_cmd *isert_cmd)
+{
+       struct iscsi_cmd *cmd = isert_cmd->iscsi_cmd;
+       struct isert_conn *isert_conn = isert_cmd->conn;
+       struct isert_device *device = isert_conn->conn_device;
+
+       device->unreg_rdma_mem(isert_cmd, isert_conn);
+       isert_put_response(isert_conn->conn, cmd);
+}
+
 static void
 isert_completion_rdma_read(struct iser_tx_desc *tx_desc,
                           struct isert_cmd *isert_cmd)
@@ -1773,8 +1787,9 @@ __isert_send_completion(struct iser_tx_desc *tx_desc,
                                          isert_conn, ib_dev);
                break;
        case ISER_IB_RDMA_WRITE:
-               pr_err("isert_send_completion: Got ISER_IB_RDMA_WRITE\n");
-               dump_stack();
+               pr_debug("isert_send_completion: Got ISER_IB_RDMA_WRITE\n");
+               atomic_dec(&isert_conn->post_send_buf_count);
+               isert_completion_rdma_write(tx_desc, isert_cmd);
                break;
        case ISER_IB_RDMA_READ:
                pr_debug("isert_send_completion: Got ISER_IB_RDMA_READ:\n");