Commit ebf1d95c authored by Andy Grover's avatar Andy Grover Committed by Nicholas Bellinger

target/iscsi: Eliminate iscsi_cmd.data_length

Redundant, just use iscsi_cmd->se_cmd.data_length once se_cmd is
initialized, or hdr->data_length before then.
Signed-off-by: default avatarAndy Grover <agrover@redhat.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 065ca1e4
...@@ -968,7 +968,6 @@ static int iscsit_handle_scsi_cmd( ...@@ -968,7 +968,6 @@ static int iscsit_handle_scsi_cmd(
buf, conn); buf, conn);
cmd->data_direction = data_direction; cmd->data_direction = data_direction;
cmd->data_length = hdr->data_length;
iscsi_task_attr = hdr->flags & ISCSI_FLAG_CMD_ATTR_MASK; iscsi_task_attr = hdr->flags & ISCSI_FLAG_CMD_ATTR_MASK;
/* /*
* Figure out the SAM Task Attribute for the incoming SCSI CDB * Figure out the SAM Task Attribute for the incoming SCSI CDB
...@@ -1026,7 +1025,7 @@ static int iscsit_handle_scsi_cmd( ...@@ -1026,7 +1025,7 @@ static int iscsit_handle_scsi_cmd(
* Initialize struct se_cmd descriptor from target_core_mod infrastructure * Initialize struct se_cmd descriptor from target_core_mod infrastructure
*/ */
transport_init_se_cmd(&cmd->se_cmd, &lio_target_fabric_configfs->tf_ops, transport_init_se_cmd(&cmd->se_cmd, &lio_target_fabric_configfs->tf_ops,
conn->sess->se_sess, cmd->data_length, cmd->data_direction, conn->sess->se_sess, hdr->data_length, cmd->data_direction,
sam_task_attr, &cmd->sense_buffer[0]); sam_task_attr, &cmd->sense_buffer[0]);
pr_debug("Got SCSI Command, ITT: 0x%08x, CmdSN: 0x%08x," pr_debug("Got SCSI Command, ITT: 0x%08x, CmdSN: 0x%08x,"
...@@ -1061,8 +1060,6 @@ static int iscsit_handle_scsi_cmd( ...@@ -1061,8 +1060,6 @@ static int iscsit_handle_scsi_cmd(
*/ */
send_check_condition = 1; send_check_condition = 1;
} else { } else {
cmd->data_length = cmd->se_cmd.data_length;
if (iscsit_decide_list_to_build(cmd, payload_length) < 0) if (iscsit_decide_list_to_build(cmd, payload_length) < 0)
return iscsit_add_reject_from_cmd( return iscsit_add_reject_from_cmd(
ISCSI_REASON_BOOKMARK_NO_RESOURCES, ISCSI_REASON_BOOKMARK_NO_RESOURCES,
...@@ -1329,10 +1326,10 @@ static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf) ...@@ -1329,10 +1326,10 @@ static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf)
se_cmd = &cmd->se_cmd; se_cmd = &cmd->se_cmd;
iscsit_mod_dataout_timer(cmd); iscsit_mod_dataout_timer(cmd);
if ((hdr->offset + payload_length) > cmd->data_length) { if ((hdr->offset + payload_length) > cmd->se_cmd.data_length) {
pr_err("DataOut Offset: %u, Length %u greater than" pr_err("DataOut Offset: %u, Length %u greater than"
" iSCSI Command EDTL %u, protocol error.\n", " iSCSI Command EDTL %u, protocol error.\n",
hdr->offset, payload_length, cmd->data_length); hdr->offset, payload_length, cmd->se_cmd.data_length);
return iscsit_add_reject_from_cmd(ISCSI_REASON_BOOKMARK_INVALID, return iscsit_add_reject_from_cmd(ISCSI_REASON_BOOKMARK_INVALID,
1, 0, buf, cmd); 1, 0, buf, cmd);
} }
...@@ -2427,7 +2424,7 @@ static int iscsit_handle_immediate_data( ...@@ -2427,7 +2424,7 @@ static int iscsit_handle_immediate_data(
cmd->write_data_done += length; cmd->write_data_done += length;
if (cmd->write_data_done == cmd->data_length) { if (cmd->write_data_done == cmd->se_cmd.data_length) {
spin_lock_bh(&cmd->istate_lock); spin_lock_bh(&cmd->istate_lock);
cmd->cmd_flags |= ICF_GOT_LAST_DATAOUT; cmd->cmd_flags |= ICF_GOT_LAST_DATAOUT;
cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT; cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT;
...@@ -2559,11 +2556,11 @@ static int iscsit_send_data_in( ...@@ -2559,11 +2556,11 @@ static int iscsit_send_data_in(
/* /*
* Be paranoid and double check the logic for now. * Be paranoid and double check the logic for now.
*/ */
if ((datain.offset + datain.length) > cmd->data_length) { if ((datain.offset + datain.length) > cmd->se_cmd.data_length) {
pr_err("Command ITT: 0x%08x, datain.offset: %u and" pr_err("Command ITT: 0x%08x, datain.offset: %u and"
" datain.length: %u exceeds cmd->data_length: %u\n", " datain.length: %u exceeds cmd->data_length: %u\n",
cmd->init_task_tag, datain.offset, datain.length, cmd->init_task_tag, datain.offset, datain.length,
cmd->data_length); cmd->se_cmd.data_length);
return -1; return -1;
} }
...@@ -3071,8 +3068,8 @@ int iscsit_build_r2ts_for_cmd( ...@@ -3071,8 +3068,8 @@ int iscsit_build_r2ts_for_cmd(
conn->sess->sess_ops->MaxBurstLength - conn->sess->sess_ops->MaxBurstLength -
cmd->next_burst_len; cmd->next_burst_len;
if (new_data_end > cmd->data_length) if (new_data_end > cmd->se_cmd.data_length)
xfer_len = cmd->data_length - offset; xfer_len = cmd->se_cmd.data_length - offset;
else else
xfer_len = xfer_len =
conn->sess->sess_ops->MaxBurstLength - conn->sess->sess_ops->MaxBurstLength -
...@@ -3081,14 +3078,14 @@ int iscsit_build_r2ts_for_cmd( ...@@ -3081,14 +3078,14 @@ int iscsit_build_r2ts_for_cmd(
int new_data_end = offset + int new_data_end = offset +
conn->sess->sess_ops->MaxBurstLength; conn->sess->sess_ops->MaxBurstLength;
if (new_data_end > cmd->data_length) if (new_data_end > cmd->se_cmd.data_length)
xfer_len = cmd->data_length - offset; xfer_len = cmd->se_cmd.data_length - offset;
else else
xfer_len = conn->sess->sess_ops->MaxBurstLength; xfer_len = conn->sess->sess_ops->MaxBurstLength;
} }
cmd->r2t_offset += xfer_len; cmd->r2t_offset += xfer_len;
if (cmd->r2t_offset == cmd->data_length) if (cmd->r2t_offset == cmd->se_cmd.data_length)
cmd->cmd_flags |= ICF_SENT_LAST_R2T; cmd->cmd_flags |= ICF_SENT_LAST_R2T;
} else { } else {
struct iscsi_seq *seq; struct iscsi_seq *seq;
......
...@@ -380,8 +380,6 @@ struct iscsi_cmd { ...@@ -380,8 +380,6 @@ struct iscsi_cmd {
u32 buf_ptr_size; u32 buf_ptr_size;
/* Used to store DataDigest */ /* Used to store DataDigest */
u32 data_crc; u32 data_crc;
/* Total size in bytes associated with command */
u32 data_length;
/* Counter for MaxOutstandingR2T */ /* Counter for MaxOutstandingR2T */
u32 outstanding_r2ts; u32 outstanding_r2ts;
/* Next R2T Offset when DataSequenceInOrder=Yes */ /* Next R2T Offset when DataSequenceInOrder=Yes */
......
...@@ -110,7 +110,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_yes_and_yes( ...@@ -110,7 +110,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_yes_and_yes(
read_data_done = (!dr->recovery) ? read_data_done = (!dr->recovery) ?
cmd->read_data_done : dr->read_data_done; cmd->read_data_done : dr->read_data_done;
read_data_left = (cmd->data_length - read_data_done); read_data_left = (cmd->se_cmd.data_length - read_data_done);
if (!read_data_left) { if (!read_data_left) {
pr_err("ITT: 0x%08x read_data_left is zero!\n", pr_err("ITT: 0x%08x read_data_left is zero!\n",
cmd->init_task_tag); cmd->init_task_tag);
...@@ -209,7 +209,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_yes( ...@@ -209,7 +209,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_yes(
seq_send_order = (!dr->recovery) ? seq_send_order = (!dr->recovery) ?
cmd->seq_send_order : dr->seq_send_order; cmd->seq_send_order : dr->seq_send_order;
read_data_left = (cmd->data_length - read_data_done); read_data_left = (cmd->se_cmd.data_length - read_data_done);
if (!read_data_left) { if (!read_data_left) {
pr_err("ITT: 0x%08x read_data_left is zero!\n", pr_err("ITT: 0x%08x read_data_left is zero!\n",
cmd->init_task_tag); cmd->init_task_tag);
...@@ -228,8 +228,8 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_yes( ...@@ -228,8 +228,8 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_yes(
offset = (seq->offset + seq->next_burst_len); offset = (seq->offset + seq->next_burst_len);
if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >= if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >=
cmd->data_length) { cmd->se_cmd.data_length) {
datain->length = (cmd->data_length - offset); datain->length = (cmd->se_cmd.data_length - offset);
datain->offset = offset; datain->offset = offset;
datain->flags |= ISCSI_FLAG_CMD_FINAL; datain->flags |= ISCSI_FLAG_CMD_FINAL;
...@@ -261,7 +261,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_yes( ...@@ -261,7 +261,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_yes(
} }
} }
if ((read_data_done + datain->length) == cmd->data_length) if ((read_data_done + datain->length) == cmd->se_cmd.data_length)
datain->flags |= ISCSI_FLAG_DATA_STATUS; datain->flags |= ISCSI_FLAG_DATA_STATUS;
datain->data_sn = (!dr->recovery) ? cmd->data_sn++ : dr->data_sn++; datain->data_sn = (!dr->recovery) ? cmd->data_sn++ : dr->data_sn++;
...@@ -330,7 +330,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_yes_and_no( ...@@ -330,7 +330,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_yes_and_no(
read_data_done = (!dr->recovery) ? read_data_done = (!dr->recovery) ?
cmd->read_data_done : dr->read_data_done; cmd->read_data_done : dr->read_data_done;
read_data_left = (cmd->data_length - read_data_done); read_data_left = (cmd->se_cmd.data_length - read_data_done);
if (!read_data_left) { if (!read_data_left) {
pr_err("ITT: 0x%08x read_data_left is zero!\n", pr_err("ITT: 0x%08x read_data_left is zero!\n",
cmd->init_task_tag); cmd->init_task_tag);
...@@ -341,7 +341,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_yes_and_no( ...@@ -341,7 +341,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_yes_and_no(
if (!pdu) if (!pdu)
return dr; return dr;
if ((read_data_done + pdu->length) == cmd->data_length) { if ((read_data_done + pdu->length) == cmd->se_cmd.data_length) {
pdu->flags |= (ISCSI_FLAG_CMD_FINAL | ISCSI_FLAG_DATA_STATUS); pdu->flags |= (ISCSI_FLAG_CMD_FINAL | ISCSI_FLAG_DATA_STATUS);
if (conn->sess->sess_ops->ErrorRecoveryLevel > 0) if (conn->sess->sess_ops->ErrorRecoveryLevel > 0)
pdu->flags |= ISCSI_FLAG_DATA_ACK; pdu->flags |= ISCSI_FLAG_DATA_ACK;
...@@ -430,7 +430,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_no( ...@@ -430,7 +430,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_no(
seq_send_order = (!dr->recovery) ? seq_send_order = (!dr->recovery) ?
cmd->seq_send_order : dr->seq_send_order; cmd->seq_send_order : dr->seq_send_order;
read_data_left = (cmd->data_length - read_data_done); read_data_left = (cmd->se_cmd.data_length - read_data_done);
if (!read_data_left) { if (!read_data_left) {
pr_err("ITT: 0x%08x read_data_left is zero!\n", pr_err("ITT: 0x%08x read_data_left is zero!\n",
cmd->init_task_tag); cmd->init_task_tag);
...@@ -460,7 +460,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_no( ...@@ -460,7 +460,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_no(
} else } else
seq->next_burst_len += pdu->length; seq->next_burst_len += pdu->length;
if ((read_data_done + pdu->length) == cmd->data_length) if ((read_data_done + pdu->length) == cmd->se_cmd.data_length)
pdu->flags |= ISCSI_FLAG_DATA_STATUS; pdu->flags |= ISCSI_FLAG_DATA_STATUS;
pdu->data_sn = (!dr->recovery) ? cmd->data_sn++ : dr->data_sn++; pdu->data_sn = (!dr->recovery) ? cmd->data_sn++ : dr->data_sn++;
......
...@@ -48,9 +48,9 @@ void iscsit_set_dataout_sequence_values( ...@@ -48,9 +48,9 @@ void iscsit_set_dataout_sequence_values(
if (cmd->unsolicited_data) { if (cmd->unsolicited_data) {
cmd->seq_start_offset = cmd->write_data_done; cmd->seq_start_offset = cmd->write_data_done;
cmd->seq_end_offset = (cmd->write_data_done + cmd->seq_end_offset = (cmd->write_data_done +
(cmd->data_length > (cmd->se_cmd.data_length >
conn->sess->sess_ops->FirstBurstLength) ? conn->sess->sess_ops->FirstBurstLength) ?
conn->sess->sess_ops->FirstBurstLength : cmd->data_length); conn->sess->sess_ops->FirstBurstLength : cmd->se_cmd.data_length);
return; return;
} }
...@@ -59,15 +59,15 @@ void iscsit_set_dataout_sequence_values( ...@@ -59,15 +59,15 @@ void iscsit_set_dataout_sequence_values(
if (!cmd->seq_start_offset && !cmd->seq_end_offset) { if (!cmd->seq_start_offset && !cmd->seq_end_offset) {
cmd->seq_start_offset = cmd->write_data_done; cmd->seq_start_offset = cmd->write_data_done;
cmd->seq_end_offset = (cmd->data_length > cmd->seq_end_offset = (cmd->se_cmd.data_length >
conn->sess->sess_ops->MaxBurstLength) ? conn->sess->sess_ops->MaxBurstLength) ?
(cmd->write_data_done + (cmd->write_data_done +
conn->sess->sess_ops->MaxBurstLength) : cmd->data_length; conn->sess->sess_ops->MaxBurstLength) : cmd->se_cmd.data_length;
} else { } else {
cmd->seq_start_offset = cmd->seq_end_offset; cmd->seq_start_offset = cmd->seq_end_offset;
cmd->seq_end_offset = ((cmd->seq_end_offset + cmd->seq_end_offset = ((cmd->seq_end_offset +
conn->sess->sess_ops->MaxBurstLength) >= conn->sess->sess_ops->MaxBurstLength) >=
cmd->data_length) ? cmd->data_length : cmd->se_cmd.data_length) ? cmd->se_cmd.data_length :
(cmd->seq_end_offset + (cmd->seq_end_offset +
conn->sess->sess_ops->MaxBurstLength); conn->sess->sess_ops->MaxBurstLength);
} }
...@@ -182,13 +182,13 @@ static int iscsit_dataout_check_unsolicited_sequence( ...@@ -182,13 +182,13 @@ static int iscsit_dataout_check_unsolicited_sequence(
if (!conn->sess->sess_ops->DataPDUInOrder) if (!conn->sess->sess_ops->DataPDUInOrder)
goto out; goto out;
if ((first_burst_len != cmd->data_length) && if ((first_burst_len != cmd->se_cmd.data_length) &&
(first_burst_len != conn->sess->sess_ops->FirstBurstLength)) { (first_burst_len != conn->sess->sess_ops->FirstBurstLength)) {
pr_err("Unsolicited non-immediate data" pr_err("Unsolicited non-immediate data"
" received %u does not equal FirstBurstLength: %u, and" " received %u does not equal FirstBurstLength: %u, and"
" does not equal ExpXferLen %u.\n", first_burst_len, " does not equal ExpXferLen %u.\n", first_burst_len,
conn->sess->sess_ops->FirstBurstLength, conn->sess->sess_ops->FirstBurstLength,
cmd->data_length); cmd->se_cmd.data_length);
transport_send_check_condition_and_sense(&cmd->se_cmd, transport_send_check_condition_and_sense(&cmd->se_cmd,
TCM_INCORRECT_AMOUNT_OF_DATA, 0); TCM_INCORRECT_AMOUNT_OF_DATA, 0);
return DATAOUT_CANNOT_RECOVER; return DATAOUT_CANNOT_RECOVER;
...@@ -201,10 +201,10 @@ static int iscsit_dataout_check_unsolicited_sequence( ...@@ -201,10 +201,10 @@ static int iscsit_dataout_check_unsolicited_sequence(
conn->sess->sess_ops->FirstBurstLength); conn->sess->sess_ops->FirstBurstLength);
return DATAOUT_CANNOT_RECOVER; return DATAOUT_CANNOT_RECOVER;
} }
if (first_burst_len == cmd->data_length) { if (first_burst_len == cmd->se_cmd.data_length) {
pr_err("Command ITT: 0x%08x reached" pr_err("Command ITT: 0x%08x reached"
" ExpXferLen: %u, but ISCSI_FLAG_CMD_FINAL is not set. protocol" " ExpXferLen: %u, but ISCSI_FLAG_CMD_FINAL is not set. protocol"
" error.\n", cmd->init_task_tag, cmd->data_length); " error.\n", cmd->init_task_tag, cmd->se_cmd.data_length);
return DATAOUT_CANNOT_RECOVER; return DATAOUT_CANNOT_RECOVER;
} }
} }
...@@ -294,7 +294,7 @@ static int iscsit_dataout_check_sequence( ...@@ -294,7 +294,7 @@ static int iscsit_dataout_check_sequence(
if ((next_burst_len < if ((next_burst_len <
conn->sess->sess_ops->MaxBurstLength) && conn->sess->sess_ops->MaxBurstLength) &&
((cmd->write_data_done + payload_length) < ((cmd->write_data_done + payload_length) <
cmd->data_length)) { cmd->se_cmd.data_length)) {
pr_err("Command ITT: 0x%08x set ISCSI_FLAG_CMD_FINAL" pr_err("Command ITT: 0x%08x set ISCSI_FLAG_CMD_FINAL"
" before end of DataOUT sequence, protocol" " before end of DataOUT sequence, protocol"
" error.\n", cmd->init_task_tag); " error.\n", cmd->init_task_tag);
...@@ -319,7 +319,7 @@ static int iscsit_dataout_check_sequence( ...@@ -319,7 +319,7 @@ static int iscsit_dataout_check_sequence(
return DATAOUT_CANNOT_RECOVER; return DATAOUT_CANNOT_RECOVER;
} }
if ((cmd->write_data_done + payload_length) == if ((cmd->write_data_done + payload_length) ==
cmd->data_length) { cmd->se_cmd.data_length) {
pr_err("Command ITT: 0x%08x reached" pr_err("Command ITT: 0x%08x reached"
" last DataOUT PDU in sequence but ISCSI_FLAG_" " last DataOUT PDU in sequence but ISCSI_FLAG_"
"CMD_FINAL is not set, protocol error.\n", "CMD_FINAL is not set, protocol error.\n",
...@@ -640,7 +640,7 @@ static int iscsit_dataout_post_crc_passed( ...@@ -640,7 +640,7 @@ static int iscsit_dataout_post_crc_passed(
cmd->write_data_done += payload_length; cmd->write_data_done += payload_length;
if (cmd->write_data_done == cmd->data_length) if (cmd->write_data_done == cmd->se_cmd.data_length)
return DATAOUT_SEND_TO_TRANSPORT; return DATAOUT_SEND_TO_TRANSPORT;
else if (send_r2t) else if (send_r2t)
return DATAOUT_SEND_R2T; return DATAOUT_SEND_R2T;
......
...@@ -1116,8 +1116,8 @@ static int iscsit_set_dataout_timeout_values( ...@@ -1116,8 +1116,8 @@ static int iscsit_set_dataout_timeout_values(
if (cmd->unsolicited_data) { if (cmd->unsolicited_data) {
*offset = 0; *offset = 0;
*length = (conn->sess->sess_ops->FirstBurstLength > *length = (conn->sess->sess_ops->FirstBurstLength >
cmd->data_length) ? cmd->se_cmd.data_length) ?
cmd->data_length : cmd->se_cmd.data_length :
conn->sess->sess_ops->FirstBurstLength; conn->sess->sess_ops->FirstBurstLength;
return 0; return 0;
} }
...@@ -1188,8 +1188,8 @@ static void iscsit_handle_dataout_timeout(unsigned long data) ...@@ -1188,8 +1188,8 @@ static void iscsit_handle_dataout_timeout(unsigned long data)
if (conn->sess->sess_ops->DataPDUInOrder) { if (conn->sess->sess_ops->DataPDUInOrder) {
pdu_offset = cmd->write_data_done; pdu_offset = cmd->write_data_done;
if ((pdu_offset + (conn->sess->sess_ops->MaxBurstLength - if ((pdu_offset + (conn->sess->sess_ops->MaxBurstLength -
cmd->next_burst_len)) > cmd->data_length) cmd->next_burst_len)) > cmd->se_cmd.data_length)
pdu_length = (cmd->data_length - pdu_length = (cmd->se_cmd.data_length -
cmd->write_data_done); cmd->write_data_done);
else else
pdu_length = (conn->sess->sess_ops->MaxBurstLength - pdu_length = (conn->sess->sess_ops->MaxBurstLength -
......
...@@ -226,11 +226,10 @@ static void iscsit_determine_counts_for_list( ...@@ -226,11 +226,10 @@ static void iscsit_determine_counts_for_list(
if ((bl->type == PDULIST_UNSOLICITED) || if ((bl->type == PDULIST_UNSOLICITED) ||
(bl->type == PDULIST_IMMEDIATE_AND_UNSOLICITED)) (bl->type == PDULIST_IMMEDIATE_AND_UNSOLICITED))
unsolicited_data_length = (cmd->data_length > unsolicited_data_length = min(cmd->se_cmd.data_length,
conn->sess->sess_ops->FirstBurstLength) ? conn->sess->sess_ops->FirstBurstLength);
conn->sess->sess_ops->FirstBurstLength : cmd->data_length;
while (offset < cmd->data_length) { while (offset < cmd->se_cmd.data_length) {
*pdu_count += 1; *pdu_count += 1;
if (check_immediate) { if (check_immediate) {
...@@ -244,10 +243,10 @@ static void iscsit_determine_counts_for_list( ...@@ -244,10 +243,10 @@ static void iscsit_determine_counts_for_list(
} }
if (unsolicited_data_length > 0) { if (unsolicited_data_length > 0) {
if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) if ((offset + conn->conn_ops->MaxRecvDataSegmentLength)
>= cmd->data_length) { >= cmd->se_cmd.data_length) {
unsolicited_data_length -= unsolicited_data_length -=
(cmd->data_length - offset); (cmd->se_cmd.data_length - offset);
offset += (cmd->data_length - offset); offset += (cmd->se_cmd.data_length - offset);
continue; continue;
} }
if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) if ((offset + conn->conn_ops->MaxRecvDataSegmentLength)
...@@ -268,8 +267,8 @@ static void iscsit_determine_counts_for_list( ...@@ -268,8 +267,8 @@ static void iscsit_determine_counts_for_list(
continue; continue;
} }
if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >= if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >=
cmd->data_length) { cmd->se_cmd.data_length) {
offset += (cmd->data_length - offset); offset += (cmd->se_cmd.data_length - offset);
continue; continue;
} }
if ((burstlength + conn->conn_ops->MaxRecvDataSegmentLength) >= if ((burstlength + conn->conn_ops->MaxRecvDataSegmentLength) >=
...@@ -311,11 +310,10 @@ static int iscsit_build_pdu_and_seq_list( ...@@ -311,11 +310,10 @@ static int iscsit_build_pdu_and_seq_list(
if ((bl->type == PDULIST_UNSOLICITED) || if ((bl->type == PDULIST_UNSOLICITED) ||
(bl->type == PDULIST_IMMEDIATE_AND_UNSOLICITED)) (bl->type == PDULIST_IMMEDIATE_AND_UNSOLICITED))
unsolicited_data_length = (cmd->data_length > unsolicited_data_length = min(cmd->se_cmd.data_length,
conn->sess->sess_ops->FirstBurstLength) ? conn->sess->sess_ops->FirstBurstLength);
conn->sess->sess_ops->FirstBurstLength : cmd->data_length;
while (offset < cmd->data_length) { while (offset < cmd->se_cmd.data_length) {
pdu_count++; pdu_count++;
if (!datapduinorder) { if (!datapduinorder) {
pdu[i].offset = offset; pdu[i].offset = offset;
...@@ -351,21 +349,21 @@ static int iscsit_build_pdu_and_seq_list( ...@@ -351,21 +349,21 @@ static int iscsit_build_pdu_and_seq_list(
if (unsolicited_data_length > 0) { if (unsolicited_data_length > 0) {
if ((offset + if ((offset +
conn->conn_ops->MaxRecvDataSegmentLength) >= conn->conn_ops->MaxRecvDataSegmentLength) >=
cmd->data_length) { cmd->se_cmd.data_length) {
if (!datapduinorder) { if (!datapduinorder) {
pdu[i].type = PDUTYPE_UNSOLICITED; pdu[i].type = PDUTYPE_UNSOLICITED;
pdu[i].length = pdu[i].length =
(cmd->data_length - offset); (cmd->se_cmd.data_length - offset);
} }
if (!datasequenceinorder) { if (!datasequenceinorder) {
seq[seq_no].type = SEQTYPE_UNSOLICITED; seq[seq_no].type = SEQTYPE_UNSOLICITED;
seq[seq_no].pdu_count = pdu_count; seq[seq_no].pdu_count = pdu_count;
seq[seq_no].xfer_len = (burstlength + seq[seq_no].xfer_len = (burstlength +
(cmd->data_length - offset)); (cmd->se_cmd.data_length - offset));
} }
unsolicited_data_length -= unsolicited_data_length -=
(cmd->data_length - offset); (cmd->se_cmd.data_length - offset);
offset += (cmd->data_length - offset); offset += (cmd->se_cmd.data_length - offset);
continue; continue;
} }
if ((offset + if ((offset +
...@@ -407,18 +405,18 @@ static int iscsit_build_pdu_and_seq_list( ...@@ -407,18 +405,18 @@ static int iscsit_build_pdu_and_seq_list(
continue; continue;
} }
if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >= if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >=
cmd->data_length) { cmd->se_cmd.data_length) {
if (!datapduinorder) { if (!datapduinorder) {
pdu[i].type = PDUTYPE_NORMAL; pdu[i].type = PDUTYPE_NORMAL;
pdu[i].length = (cmd->data_length - offset); pdu[i].length = (cmd->se_cmd.data_length - offset);
} }
if (!datasequenceinorder) { if (!datasequenceinorder) {
seq[seq_no].type = SEQTYPE_NORMAL; seq[seq_no].type = SEQTYPE_NORMAL;
seq[seq_no].pdu_count = pdu_count; seq[seq_no].pdu_count = pdu_count;
seq[seq_no].xfer_len = (burstlength + seq[seq_no].xfer_len = (burstlength +
(cmd->data_length - offset)); (cmd->se_cmd.data_length - offset));
} }
offset += (cmd->data_length - offset); offset += (cmd->se_cmd.data_length - offset);
continue; continue;
} }
if ((burstlength + conn->conn_ops->MaxRecvDataSegmentLength) >= if ((burstlength + conn->conn_ops->MaxRecvDataSegmentLength) >=
......
...@@ -269,9 +269,9 @@ static int iscsit_task_reassign_complete_write( ...@@ -269,9 +269,9 @@ static int iscsit_task_reassign_complete_write(
offset = cmd->next_burst_len = cmd->write_data_done; offset = cmd->next_burst_len = cmd->write_data_done;
if ((conn->sess->sess_ops->FirstBurstLength - offset) >= if ((conn->sess->sess_ops->FirstBurstLength - offset) >=
cmd->data_length) { cmd->se_cmd.data_length) {
no_build_r2ts = 1; no_build_r2ts = 1;
length = (cmd->data_length - offset); length = (cmd->se_cmd.data_length - offset);
} else } else
length = (conn->sess->sess_ops->FirstBurstLength - offset); length = (conn->sess->sess_ops->FirstBurstLength - offset);
......
...@@ -379,14 +379,14 @@ int iscsit_check_unsolicited_dataout(struct iscsi_cmd *cmd, unsigned char *buf) ...@@ -379,14 +379,14 @@ int iscsit_check_unsolicited_dataout(struct iscsi_cmd *cmd, unsigned char *buf)
if (!(hdr->flags & ISCSI_FLAG_CMD_FINAL)) if (!(hdr->flags & ISCSI_FLAG_CMD_FINAL))
return 0; return 0;
if (((cmd->first_burst_len + payload_length) != cmd->data_length) && if (((cmd->first_burst_len + payload_length) != cmd->se_cmd.data_length) &&
((cmd->first_burst_len + payload_length) != ((cmd->first_burst_len + payload_length) !=
conn->sess->sess_ops->FirstBurstLength)) { conn->sess->sess_ops->FirstBurstLength)) {
pr_err("Unsolicited non-immediate data received %u" pr_err("Unsolicited non-immediate data received %u"
" does not equal FirstBurstLength: %u, and does" " does not equal FirstBurstLength: %u, and does"
" not equal ExpXferLen %u.\n", " not equal ExpXferLen %u.\n",
(cmd->first_burst_len + payload_length), (cmd->first_burst_len + payload_length),
conn->sess->sess_ops->FirstBurstLength, cmd->data_length); conn->sess->sess_ops->FirstBurstLength, cmd->se_cmd.data_length);
transport_send_check_condition_and_sense(se_cmd, transport_send_check_condition_and_sense(se_cmd,
TCM_INCORRECT_AMOUNT_OF_DATA, 0); TCM_INCORRECT_AMOUNT_OF_DATA, 0);
return -1; return -1;
......
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