Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -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;


+1 −1
Original line number Original line Diff line number Diff line
@@ -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;


+7 −7
Original line number Original line Diff line number Diff line
@@ -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;
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);