[SCSI] libiscsi: pass opcode into alloc_pdu callout
Mike Christie [Tue, 2 Dec 2008 06:32:14 +0000 (00:32 -0600)]
We do not need to allocate a itt for data_out, so this
passes the opcode to the alloc_pdu callout.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>

drivers/infiniband/ulp/iser/iscsi_iser.c
drivers/scsi/iscsi_tcp.c
drivers/scsi/libiscsi.c
drivers/scsi/libiscsi_tcp.c
include/scsi/scsi_transport_iscsi.h

index 78bf5e4..1287639 100644 (file)
@@ -119,7 +119,7 @@ error:
        iscsi_conn_failure(conn, rc);
 }
 
-static int iscsi_iser_pdu_alloc(struct iscsi_task *task)
+static int iscsi_iser_pdu_alloc(struct iscsi_task *task, uint8_t opcode)
 {
        struct iscsi_iser_task *iser_task = task->dd_data;
 
index 07d9eb1..de5c9b3 100644 (file)
@@ -457,7 +457,7 @@ static int iscsi_sw_tcp_pdu_init(struct iscsi_task *task,
        return 0;
 }
 
-static int iscsi_sw_tcp_pdu_alloc(struct iscsi_task *task)
+static int iscsi_sw_tcp_pdu_alloc(struct iscsi_task *task, uint8_t opcode)
 {
        struct iscsi_tcp_task *tcp_task = task->dd_data;
 
index 6c4034b..ddf5397 100644 (file)
@@ -225,13 +225,18 @@ static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task)
        itt_t itt;
        int rc;
 
-       rc = conn->session->tt->alloc_pdu(task);
+       rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_CMD);
        if (rc)
                return rc;
        hdr = (struct iscsi_cmd *) task->hdr;
        itt = hdr->itt;
        memset(hdr, 0, sizeof(*hdr));
 
+       if (session->tt->parse_pdu_itt)
+               hdr->itt = task->hdr_itt = itt;
+       else
+               hdr->itt = task->hdr_itt = build_itt(task->itt,
+                                                    task->conn->session->age);
        task->hdr_len = 0;
        rc = iscsi_add_hdr(task, sizeof(*hdr));
        if (rc)
@@ -240,11 +245,6 @@ static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task)
        hdr->flags = ISCSI_ATTR_SIMPLE;
        int_to_scsilun(sc->device->lun, (struct scsi_lun *)hdr->lun);
        memcpy(task->lun, hdr->lun, sizeof(task->lun));
-       if (session->tt->parse_pdu_itt)
-               hdr->itt = task->hdr_itt = itt;
-       else
-               hdr->itt = task->hdr_itt = build_itt(task->itt,
-                                                    task->conn->session->age);
        hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn);
        session->cmdsn++;
        hdr->exp_statsn = cpu_to_be32(conn->exp_statsn);
@@ -532,7 +532,7 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
        } else
                task->data_count = 0;
 
-       if (conn->session->tt->alloc_pdu(task)) {
+       if (conn->session->tt->alloc_pdu(task, hdr->opcode)) {
                iscsi_conn_printk(KERN_ERR, conn, "Could not allocate "
                                 "pdu for mgmt task.\n");
                goto requeue_task;
index e865089..9df6b34 100644 (file)
@@ -1021,7 +1021,7 @@ flush:
                return 0;
        }
 
-       rc = conn->session->tt->alloc_pdu(task);
+       rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_DATA_OUT);
        if (rc)
                return rc;
        iscsi_prep_data_out_pdu(task, r2t, (struct iscsi_data *) task->hdr);
index e13cb20..b50aabe 100644 (file)
@@ -118,7 +118,7 @@ struct iscsi_transport {
        int (*xmit_task) (struct iscsi_task *task);
        void (*cleanup_task) (struct iscsi_task *task);
 
-       int (*alloc_pdu) (struct iscsi_task *task);
+       int (*alloc_pdu) (struct iscsi_task *task, uint8_t opcode);
        int (*xmit_pdu) (struct iscsi_task *task);
        int (*init_pdu) (struct iscsi_task *task, unsigned int offset,
                         unsigned int count);