[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: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
262ef63627
commit
2ff79d52d5
@ -119,7 +119,7 @@ error:
|
|||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
} 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 @@ flush:
|
|||||||
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 {
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user