]> Pileus Git - ~andy/linux/commitdiff
IB/iser: Use libiscsi passthrough mode
authorOr Gerlitz <ogerlitz@voltaire.com>
Mon, 8 Feb 2010 13:22:34 +0000 (13:22 +0000)
committerRoland Dreier <rolandd@cisco.com>
Wed, 24 Feb 2010 17:41:14 +0000 (09:41 -0800)
libiscsi passthrough mode invokes the transport xmit calls directly
without first going through an internal queue, unlike the other mode,
which uses a queue and a xmitworker thread.  Now that the "cant_sleep"
prerequisite of iscsi_host_alloc is met, move to use it.  Handling
xmit errors is now done by the passthrough flow of libiscsi.  Since
the queue/worker aren't used in this mode, the code that schedules the
xmitworker is removed.

Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/iser/iscsi_iser.c
drivers/infiniband/ulp/iser/iser_initiator.c

index 331147b71a916a8b6c3b532032f68bee0135bdff..71237f8f78f723610144cc730ce81cd9437dad3c 100644 (file)
@@ -190,7 +190,7 @@ iscsi_iser_mtask_xmit(struct iscsi_conn *conn, struct iscsi_task *task)
 {
        int error = 0;
 
-       iser_dbg("task deq [cid %d itt 0x%x]\n", conn->id, task->itt);
+       iser_dbg("mtask xmit [cid %d itt 0x%x]\n", conn->id, task->itt);
 
        error = iser_send_control(conn, task);
 
@@ -200,9 +200,6 @@ iscsi_iser_mtask_xmit(struct iscsi_conn *conn, struct iscsi_task *task)
         * - if yes, the task is recycled at iscsi_complete_pdu
         * - if no,  the task is recycled at iser_snd_completion
         */
-       if (error && error != -ENOBUFS)
-               iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
-
        return error;
 }
 
@@ -254,7 +251,7 @@ iscsi_iser_task_xmit(struct iscsi_task *task)
                           task->imm_count, task->unsol_r2t.data_length);
        }
 
-       iser_dbg("task deq [cid %d itt 0x%x]\n",
+       iser_dbg("ctask xmit [cid %d itt 0x%x]\n",
                   conn->id, task->itt);
 
        /* Send the cmd PDU */
@@ -270,8 +267,6 @@ iscsi_iser_task_xmit(struct iscsi_task *task)
                error = iscsi_iser_task_xmit_unsol_data(conn, task);
 
  iscsi_iser_task_xmit_exit:
-       if (error && error != -ENOBUFS)
-               iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
        return error;
 }
 
@@ -423,7 +418,7 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep,
        struct Scsi_Host *shost;
        struct iser_conn *ib_conn;
 
-       shost = iscsi_host_alloc(&iscsi_iser_sht, 0, 1);
+       shost = iscsi_host_alloc(&iscsi_iser_sht, 0, 0);
        if (!shost)
                return NULL;
        shost->transportt = iscsi_iser_scsi_transport;
index 27450eebd1e42965a911aa75a9dd43d92b12d3bb..f447ace89cb17b078f79ff8e852d2e5100b86b77 100644 (file)
@@ -514,10 +514,7 @@ void iser_rcv_completion(struct iser_rx_desc *rx_desc,
 void iser_snd_completion(struct iser_tx_desc *tx_desc,
                        struct iser_conn *ib_conn)
 {
-       struct iscsi_iser_conn *iser_conn = ib_conn->iser_conn;
-       struct iscsi_conn      *conn = iser_conn->iscsi_conn;
        struct iscsi_task *task;
-       int resume_tx = 0;
        struct iser_device *device = ib_conn->device;
 
        if (tx_desc->type == ISCSI_TX_DATAOUT) {
@@ -526,17 +523,8 @@ void iser_snd_completion(struct iser_tx_desc *tx_desc,
                kmem_cache_free(ig.desc_cache, tx_desc);
        }
 
-       if (atomic_read(&iser_conn->ib_conn->post_send_buf_count) ==
-           ISER_QP_MAX_REQ_DTOS)
-               resume_tx = 1;
-
        atomic_dec(&ib_conn->post_send_buf_count);
 
-       if (resume_tx) {
-               iser_dbg("%ld resuming tx\n",jiffies);
-               iscsi_conn_queue_work(conn);
-       }
-
        if (tx_desc->type == ISCSI_TX_CONTROL) {
                /* this arithmetic is legal by libiscsi dd_data allocation */
                task = (void *) ((long)(void *)tx_desc -