Commit 2ff79d52 authored by Mike Christie's avatar Mike Christie Committed by James Bottomley

[SCSI] libiscsi: pass opcode into alloc_pdu callout

We do not need to allocate a itt for data_out, so this
passes the opcode to the alloc_pdu callout.
Signed-off-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 262ef636
...@@ -119,7 +119,7 @@ iscsi_iser_recv(struct iscsi_conn *conn, ...@@ -119,7 +119,7 @@ iscsi_iser_recv(struct iscsi_conn *conn,
iscsi_conn_failure(conn, rc); 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; struct iscsi_iser_task *iser_task = task->dd_data;
......
...@@ -457,7 +457,7 @@ static int iscsi_sw_tcp_pdu_init(struct iscsi_task *task, ...@@ -457,7 +457,7 @@ static int iscsi_sw_tcp_pdu_init(struct iscsi_task *task,
return 0; 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; struct iscsi_tcp_task *tcp_task = task->dd_data;
......
...@@ -225,13 +225,18 @@ static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task) ...@@ -225,13 +225,18 @@ static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task)
itt_t itt; itt_t itt;
int rc; int rc;
rc = conn->session->tt->alloc_pdu(task); rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_CMD);
if (rc) if (rc)
return rc; return rc;
hdr = (struct iscsi_cmd *) task->hdr; hdr = (struct iscsi_cmd *) task->hdr;
itt = hdr->itt; itt = hdr->itt;
memset(hdr, 0, sizeof(*hdr)); 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; task->hdr_len = 0;
rc = iscsi_add_hdr(task, sizeof(*hdr)); rc = iscsi_add_hdr(task, sizeof(*hdr));
if (rc) if (rc)
...@@ -240,11 +245,6 @@ static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task) ...@@ -240,11 +245,6 @@ static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task)
hdr->flags = ISCSI_ATTR_SIMPLE; hdr->flags = ISCSI_ATTR_SIMPLE;
int_to_scsilun(sc->device->lun, (struct scsi_lun *)hdr->lun); int_to_scsilun(sc->device->lun, (struct scsi_lun *)hdr->lun);
memcpy(task->lun, hdr->lun, sizeof(task->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); hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn);
session->cmdsn++; session->cmdsn++;
hdr->exp_statsn = cpu_to_be32(conn->exp_statsn); 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, ...@@ -532,7 +532,7 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
} else } else
task->data_count = 0; 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 " iscsi_conn_printk(KERN_ERR, conn, "Could not allocate "
"pdu for mgmt task.\n"); "pdu for mgmt task.\n");
goto requeue_task; goto requeue_task;
......
...@@ -1021,7 +1021,7 @@ int iscsi_tcp_task_xmit(struct iscsi_task *task) ...@@ -1021,7 +1021,7 @@ int iscsi_tcp_task_xmit(struct iscsi_task *task)
return 0; return 0;
} }
rc = conn->session->tt->alloc_pdu(task); rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_DATA_OUT);
if (rc) if (rc)
return rc; return rc;
iscsi_prep_data_out_pdu(task, r2t, (struct iscsi_data *) task->hdr); iscsi_prep_data_out_pdu(task, r2t, (struct iscsi_data *) task->hdr);
......
...@@ -118,7 +118,7 @@ struct iscsi_transport { ...@@ -118,7 +118,7 @@ struct iscsi_transport {
int (*xmit_task) (struct iscsi_task *task); int (*xmit_task) (struct iscsi_task *task);
void (*cleanup_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 (*xmit_pdu) (struct iscsi_task *task);
int (*init_pdu) (struct iscsi_task *task, unsigned int offset, int (*init_pdu) (struct iscsi_task *task, unsigned int offset,
unsigned int count); unsigned int count);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment