diff options
author | Andy Grover <agrover@redhat.com> | 2012-04-03 18:51:24 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2012-04-14 20:40:38 -0400 |
commit | ebf1d95ca297a06fe760177b614646dcec06abef (patch) | |
tree | 6ee7e2c5934ff0e7cd7e30b1e02590d0b4145406 /drivers/target | |
parent | 065ca1e42ffd74dd03cf60f61cead35934c91ed5 (diff) |
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: Andy Grover <agrover@redhat.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target')
-rw-r--r-- | drivers/target/iscsi/iscsi_target.c | 25 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_core.h | 2 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_datain_values.c | 18 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_erl0.c | 24 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_erl1.c | 8 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_seq_pdu_list.c | 42 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_tmr.c | 4 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_util.c | 4 |
8 files changed, 60 insertions, 67 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index 1b51a3ed17f5..a29a1bb279d5 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c | |||
@@ -968,7 +968,6 @@ done: | |||
968 | buf, conn); | 968 | buf, conn); |
969 | 969 | ||
970 | cmd->data_direction = data_direction; | 970 | cmd->data_direction = data_direction; |
971 | cmd->data_length = hdr->data_length; | ||
972 | iscsi_task_attr = hdr->flags & ISCSI_FLAG_CMD_ATTR_MASK; | 971 | iscsi_task_attr = hdr->flags & ISCSI_FLAG_CMD_ATTR_MASK; |
973 | /* | 972 | /* |
974 | * Figure out the SAM Task Attribute for the incoming SCSI CDB | 973 | * Figure out the SAM Task Attribute for the incoming SCSI CDB |
@@ -1026,7 +1025,7 @@ done: | |||
1026 | * Initialize struct se_cmd descriptor from target_core_mod infrastructure | 1025 | * Initialize struct se_cmd descriptor from target_core_mod infrastructure |
1027 | */ | 1026 | */ |
1028 | transport_init_se_cmd(&cmd->se_cmd, &lio_target_fabric_configfs->tf_ops, | 1027 | transport_init_se_cmd(&cmd->se_cmd, &lio_target_fabric_configfs->tf_ops, |
1029 | conn->sess->se_sess, cmd->data_length, cmd->data_direction, | 1028 | conn->sess->se_sess, hdr->data_length, cmd->data_direction, |
1030 | sam_task_attr, &cmd->sense_buffer[0]); | 1029 | sam_task_attr, &cmd->sense_buffer[0]); |
1031 | 1030 | ||
1032 | pr_debug("Got SCSI Command, ITT: 0x%08x, CmdSN: 0x%08x," | 1031 | pr_debug("Got SCSI Command, ITT: 0x%08x, CmdSN: 0x%08x," |
@@ -1061,8 +1060,6 @@ done: | |||
1061 | */ | 1060 | */ |
1062 | send_check_condition = 1; | 1061 | send_check_condition = 1; |
1063 | } else { | 1062 | } else { |
1064 | cmd->data_length = cmd->se_cmd.data_length; | ||
1065 | |||
1066 | if (iscsit_decide_list_to_build(cmd, payload_length) < 0) | 1063 | if (iscsit_decide_list_to_build(cmd, payload_length) < 0) |
1067 | return iscsit_add_reject_from_cmd( | 1064 | return iscsit_add_reject_from_cmd( |
1068 | ISCSI_REASON_BOOKMARK_NO_RESOURCES, | 1065 | ISCSI_REASON_BOOKMARK_NO_RESOURCES, |
@@ -1329,10 +1326,10 @@ static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf) | |||
1329 | se_cmd = &cmd->se_cmd; | 1326 | se_cmd = &cmd->se_cmd; |
1330 | iscsit_mod_dataout_timer(cmd); | 1327 | iscsit_mod_dataout_timer(cmd); |
1331 | 1328 | ||
1332 | if ((hdr->offset + payload_length) > cmd->data_length) { | 1329 | if ((hdr->offset + payload_length) > cmd->se_cmd.data_length) { |
1333 | pr_err("DataOut Offset: %u, Length %u greater than" | 1330 | pr_err("DataOut Offset: %u, Length %u greater than" |
1334 | " iSCSI Command EDTL %u, protocol error.\n", | 1331 | " iSCSI Command EDTL %u, protocol error.\n", |
1335 | hdr->offset, payload_length, cmd->data_length); | 1332 | hdr->offset, payload_length, cmd->se_cmd.data_length); |
1336 | return iscsit_add_reject_from_cmd(ISCSI_REASON_BOOKMARK_INVALID, | 1333 | return iscsit_add_reject_from_cmd(ISCSI_REASON_BOOKMARK_INVALID, |
1337 | 1, 0, buf, cmd); | 1334 | 1, 0, buf, cmd); |
1338 | } | 1335 | } |
@@ -2427,7 +2424,7 @@ static int iscsit_handle_immediate_data( | |||
2427 | 2424 | ||
2428 | cmd->write_data_done += length; | 2425 | cmd->write_data_done += length; |
2429 | 2426 | ||
2430 | if (cmd->write_data_done == cmd->data_length) { | 2427 | if (cmd->write_data_done == cmd->se_cmd.data_length) { |
2431 | spin_lock_bh(&cmd->istate_lock); | 2428 | spin_lock_bh(&cmd->istate_lock); |
2432 | cmd->cmd_flags |= ICF_GOT_LAST_DATAOUT; | 2429 | cmd->cmd_flags |= ICF_GOT_LAST_DATAOUT; |
2433 | cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT; | 2430 | cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT; |
@@ -2559,11 +2556,11 @@ static int iscsit_send_data_in( | |||
2559 | /* | 2556 | /* |
2560 | * Be paranoid and double check the logic for now. | 2557 | * Be paranoid and double check the logic for now. |
2561 | */ | 2558 | */ |
2562 | if ((datain.offset + datain.length) > cmd->data_length) { | 2559 | if ((datain.offset + datain.length) > cmd->se_cmd.data_length) { |
2563 | pr_err("Command ITT: 0x%08x, datain.offset: %u and" | 2560 | pr_err("Command ITT: 0x%08x, datain.offset: %u and" |
2564 | " datain.length: %u exceeds cmd->data_length: %u\n", | 2561 | " datain.length: %u exceeds cmd->data_length: %u\n", |
2565 | cmd->init_task_tag, datain.offset, datain.length, | 2562 | cmd->init_task_tag, datain.offset, datain.length, |
2566 | cmd->data_length); | 2563 | cmd->se_cmd.data_length); |
2567 | return -1; | 2564 | return -1; |
2568 | } | 2565 | } |
2569 | 2566 | ||
@@ -3071,8 +3068,8 @@ int iscsit_build_r2ts_for_cmd( | |||
3071 | conn->sess->sess_ops->MaxBurstLength - | 3068 | conn->sess->sess_ops->MaxBurstLength - |
3072 | cmd->next_burst_len; | 3069 | cmd->next_burst_len; |
3073 | 3070 | ||
3074 | if (new_data_end > cmd->data_length) | 3071 | if (new_data_end > cmd->se_cmd.data_length) |
3075 | xfer_len = cmd->data_length - offset; | 3072 | xfer_len = cmd->se_cmd.data_length - offset; |
3076 | else | 3073 | else |
3077 | xfer_len = | 3074 | xfer_len = |
3078 | conn->sess->sess_ops->MaxBurstLength - | 3075 | conn->sess->sess_ops->MaxBurstLength - |
@@ -3081,14 +3078,14 @@ int iscsit_build_r2ts_for_cmd( | |||
3081 | int new_data_end = offset + | 3078 | int new_data_end = offset + |
3082 | conn->sess->sess_ops->MaxBurstLength; | 3079 | conn->sess->sess_ops->MaxBurstLength; |
3083 | 3080 | ||
3084 | if (new_data_end > cmd->data_length) | 3081 | if (new_data_end > cmd->se_cmd.data_length) |
3085 | xfer_len = cmd->data_length - offset; | 3082 | xfer_len = cmd->se_cmd.data_length - offset; |
3086 | else | 3083 | else |
3087 | xfer_len = conn->sess->sess_ops->MaxBurstLength; | 3084 | xfer_len = conn->sess->sess_ops->MaxBurstLength; |
3088 | } | 3085 | } |
3089 | cmd->r2t_offset += xfer_len; | 3086 | cmd->r2t_offset += xfer_len; |
3090 | 3087 | ||
3091 | if (cmd->r2t_offset == cmd->data_length) | 3088 | if (cmd->r2t_offset == cmd->se_cmd.data_length) |
3092 | cmd->cmd_flags |= ICF_SENT_LAST_R2T; | 3089 | cmd->cmd_flags |= ICF_SENT_LAST_R2T; |
3093 | } else { | 3090 | } else { |
3094 | struct iscsi_seq *seq; | 3091 | struct iscsi_seq *seq; |
diff --git a/drivers/target/iscsi/iscsi_target_core.h b/drivers/target/iscsi/iscsi_target_core.h index 1a9a64ab4feb..94c736e3a640 100644 --- a/drivers/target/iscsi/iscsi_target_core.h +++ b/drivers/target/iscsi/iscsi_target_core.h | |||
@@ -380,8 +380,6 @@ struct iscsi_cmd { | |||
380 | u32 buf_ptr_size; | 380 | u32 buf_ptr_size; |
381 | /* Used to store DataDigest */ | 381 | /* Used to store DataDigest */ |
382 | u32 data_crc; | 382 | u32 data_crc; |
383 | /* Total size in bytes associated with command */ | ||
384 | u32 data_length; | ||
385 | /* Counter for MaxOutstandingR2T */ | 383 | /* Counter for MaxOutstandingR2T */ |
386 | u32 outstanding_r2ts; | 384 | u32 outstanding_r2ts; |
387 | /* Next R2T Offset when DataSequenceInOrder=Yes */ | 385 | /* Next R2T Offset when DataSequenceInOrder=Yes */ |
diff --git a/drivers/target/iscsi/iscsi_target_datain_values.c b/drivers/target/iscsi/iscsi_target_datain_values.c index c19ca42eac67..848fee768948 100644 --- a/drivers/target/iscsi/iscsi_target_datain_values.c +++ b/drivers/target/iscsi/iscsi_target_datain_values.c | |||
@@ -110,7 +110,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_yes_and_yes( | |||
110 | read_data_done = (!dr->recovery) ? | 110 | read_data_done = (!dr->recovery) ? |
111 | cmd->read_data_done : dr->read_data_done; | 111 | cmd->read_data_done : dr->read_data_done; |
112 | 112 | ||
113 | read_data_left = (cmd->data_length - read_data_done); | 113 | read_data_left = (cmd->se_cmd.data_length - read_data_done); |
114 | if (!read_data_left) { | 114 | if (!read_data_left) { |
115 | pr_err("ITT: 0x%08x read_data_left is zero!\n", | 115 | pr_err("ITT: 0x%08x read_data_left is zero!\n", |
116 | cmd->init_task_tag); | 116 | cmd->init_task_tag); |
@@ -209,7 +209,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_yes( | |||
209 | seq_send_order = (!dr->recovery) ? | 209 | seq_send_order = (!dr->recovery) ? |
210 | cmd->seq_send_order : dr->seq_send_order; | 210 | cmd->seq_send_order : dr->seq_send_order; |
211 | 211 | ||
212 | read_data_left = (cmd->data_length - read_data_done); | 212 | read_data_left = (cmd->se_cmd.data_length - read_data_done); |
213 | if (!read_data_left) { | 213 | if (!read_data_left) { |
214 | pr_err("ITT: 0x%08x read_data_left is zero!\n", | 214 | pr_err("ITT: 0x%08x read_data_left is zero!\n", |
215 | cmd->init_task_tag); | 215 | cmd->init_task_tag); |
@@ -228,8 +228,8 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_yes( | |||
228 | offset = (seq->offset + seq->next_burst_len); | 228 | offset = (seq->offset + seq->next_burst_len); |
229 | 229 | ||
230 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >= | 230 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >= |
231 | cmd->data_length) { | 231 | cmd->se_cmd.data_length) { |
232 | datain->length = (cmd->data_length - offset); | 232 | datain->length = (cmd->se_cmd.data_length - offset); |
233 | datain->offset = offset; | 233 | datain->offset = offset; |
234 | 234 | ||
235 | datain->flags |= ISCSI_FLAG_CMD_FINAL; | 235 | datain->flags |= ISCSI_FLAG_CMD_FINAL; |
@@ -261,7 +261,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_yes( | |||
261 | } | 261 | } |
262 | } | 262 | } |
263 | 263 | ||
264 | if ((read_data_done + datain->length) == cmd->data_length) | 264 | if ((read_data_done + datain->length) == cmd->se_cmd.data_length) |
265 | datain->flags |= ISCSI_FLAG_DATA_STATUS; | 265 | datain->flags |= ISCSI_FLAG_DATA_STATUS; |
266 | 266 | ||
267 | datain->data_sn = (!dr->recovery) ? cmd->data_sn++ : dr->data_sn++; | 267 | 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 | read_data_done = (!dr->recovery) ? | 330 | read_data_done = (!dr->recovery) ? |
331 | cmd->read_data_done : dr->read_data_done; | 331 | cmd->read_data_done : dr->read_data_done; |
332 | 332 | ||
333 | read_data_left = (cmd->data_length - read_data_done); | 333 | read_data_left = (cmd->se_cmd.data_length - read_data_done); |
334 | if (!read_data_left) { | 334 | if (!read_data_left) { |
335 | pr_err("ITT: 0x%08x read_data_left is zero!\n", | 335 | pr_err("ITT: 0x%08x read_data_left is zero!\n", |
336 | cmd->init_task_tag); | 336 | cmd->init_task_tag); |
@@ -341,7 +341,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_yes_and_no( | |||
341 | if (!pdu) | 341 | if (!pdu) |
342 | return dr; | 342 | return dr; |
343 | 343 | ||
344 | if ((read_data_done + pdu->length) == cmd->data_length) { | 344 | if ((read_data_done + pdu->length) == cmd->se_cmd.data_length) { |
345 | pdu->flags |= (ISCSI_FLAG_CMD_FINAL | ISCSI_FLAG_DATA_STATUS); | 345 | pdu->flags |= (ISCSI_FLAG_CMD_FINAL | ISCSI_FLAG_DATA_STATUS); |
346 | if (conn->sess->sess_ops->ErrorRecoveryLevel > 0) | 346 | if (conn->sess->sess_ops->ErrorRecoveryLevel > 0) |
347 | pdu->flags |= ISCSI_FLAG_DATA_ACK; | 347 | pdu->flags |= ISCSI_FLAG_DATA_ACK; |
@@ -430,7 +430,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_no( | |||
430 | seq_send_order = (!dr->recovery) ? | 430 | seq_send_order = (!dr->recovery) ? |
431 | cmd->seq_send_order : dr->seq_send_order; | 431 | cmd->seq_send_order : dr->seq_send_order; |
432 | 432 | ||
433 | read_data_left = (cmd->data_length - read_data_done); | 433 | read_data_left = (cmd->se_cmd.data_length - read_data_done); |
434 | if (!read_data_left) { | 434 | if (!read_data_left) { |
435 | pr_err("ITT: 0x%08x read_data_left is zero!\n", | 435 | pr_err("ITT: 0x%08x read_data_left is zero!\n", |
436 | cmd->init_task_tag); | 436 | cmd->init_task_tag); |
@@ -460,7 +460,7 @@ static struct iscsi_datain_req *iscsit_set_datain_values_no_and_no( | |||
460 | } else | 460 | } else |
461 | seq->next_burst_len += pdu->length; | 461 | seq->next_burst_len += pdu->length; |
462 | 462 | ||
463 | if ((read_data_done + pdu->length) == cmd->data_length) | 463 | if ((read_data_done + pdu->length) == cmd->se_cmd.data_length) |
464 | pdu->flags |= ISCSI_FLAG_DATA_STATUS; | 464 | pdu->flags |= ISCSI_FLAG_DATA_STATUS; |
465 | 465 | ||
466 | pdu->data_sn = (!dr->recovery) ? cmd->data_sn++ : dr->data_sn++; | 466 | pdu->data_sn = (!dr->recovery) ? cmd->data_sn++ : dr->data_sn++; |
diff --git a/drivers/target/iscsi/iscsi_target_erl0.c b/drivers/target/iscsi/iscsi_target_erl0.c index dd11520eb8b4..1a02016ecdab 100644 --- a/drivers/target/iscsi/iscsi_target_erl0.c +++ b/drivers/target/iscsi/iscsi_target_erl0.c | |||
@@ -48,9 +48,9 @@ void iscsit_set_dataout_sequence_values( | |||
48 | if (cmd->unsolicited_data) { | 48 | if (cmd->unsolicited_data) { |
49 | cmd->seq_start_offset = cmd->write_data_done; | 49 | cmd->seq_start_offset = cmd->write_data_done; |
50 | cmd->seq_end_offset = (cmd->write_data_done + | 50 | cmd->seq_end_offset = (cmd->write_data_done + |
51 | (cmd->data_length > | 51 | (cmd->se_cmd.data_length > |
52 | conn->sess->sess_ops->FirstBurstLength) ? | 52 | conn->sess->sess_ops->FirstBurstLength) ? |
53 | conn->sess->sess_ops->FirstBurstLength : cmd->data_length); | 53 | conn->sess->sess_ops->FirstBurstLength : cmd->se_cmd.data_length); |
54 | return; | 54 | return; |
55 | } | 55 | } |
56 | 56 | ||
@@ -59,15 +59,15 @@ void iscsit_set_dataout_sequence_values( | |||
59 | 59 | ||
60 | if (!cmd->seq_start_offset && !cmd->seq_end_offset) { | 60 | if (!cmd->seq_start_offset && !cmd->seq_end_offset) { |
61 | cmd->seq_start_offset = cmd->write_data_done; | 61 | cmd->seq_start_offset = cmd->write_data_done; |
62 | cmd->seq_end_offset = (cmd->data_length > | 62 | cmd->seq_end_offset = (cmd->se_cmd.data_length > |
63 | conn->sess->sess_ops->MaxBurstLength) ? | 63 | conn->sess->sess_ops->MaxBurstLength) ? |
64 | (cmd->write_data_done + | 64 | (cmd->write_data_done + |
65 | conn->sess->sess_ops->MaxBurstLength) : cmd->data_length; | 65 | conn->sess->sess_ops->MaxBurstLength) : cmd->se_cmd.data_length; |
66 | } else { | 66 | } else { |
67 | cmd->seq_start_offset = cmd->seq_end_offset; | 67 | cmd->seq_start_offset = cmd->seq_end_offset; |
68 | cmd->seq_end_offset = ((cmd->seq_end_offset + | 68 | cmd->seq_end_offset = ((cmd->seq_end_offset + |
69 | conn->sess->sess_ops->MaxBurstLength) >= | 69 | conn->sess->sess_ops->MaxBurstLength) >= |
70 | cmd->data_length) ? cmd->data_length : | 70 | cmd->se_cmd.data_length) ? cmd->se_cmd.data_length : |
71 | (cmd->seq_end_offset + | 71 | (cmd->seq_end_offset + |
72 | conn->sess->sess_ops->MaxBurstLength); | 72 | conn->sess->sess_ops->MaxBurstLength); |
73 | } | 73 | } |
@@ -182,13 +182,13 @@ static int iscsit_dataout_check_unsolicited_sequence( | |||
182 | if (!conn->sess->sess_ops->DataPDUInOrder) | 182 | if (!conn->sess->sess_ops->DataPDUInOrder) |
183 | goto out; | 183 | goto out; |
184 | 184 | ||
185 | if ((first_burst_len != cmd->data_length) && | 185 | if ((first_burst_len != cmd->se_cmd.data_length) && |
186 | (first_burst_len != conn->sess->sess_ops->FirstBurstLength)) { | 186 | (first_burst_len != conn->sess->sess_ops->FirstBurstLength)) { |
187 | pr_err("Unsolicited non-immediate data" | 187 | pr_err("Unsolicited non-immediate data" |
188 | " received %u does not equal FirstBurstLength: %u, and" | 188 | " received %u does not equal FirstBurstLength: %u, and" |
189 | " does not equal ExpXferLen %u.\n", first_burst_len, | 189 | " does not equal ExpXferLen %u.\n", first_burst_len, |
190 | conn->sess->sess_ops->FirstBurstLength, | 190 | conn->sess->sess_ops->FirstBurstLength, |
191 | cmd->data_length); | 191 | cmd->se_cmd.data_length); |
192 | transport_send_check_condition_and_sense(&cmd->se_cmd, | 192 | transport_send_check_condition_and_sense(&cmd->se_cmd, |
193 | TCM_INCORRECT_AMOUNT_OF_DATA, 0); | 193 | TCM_INCORRECT_AMOUNT_OF_DATA, 0); |
194 | return DATAOUT_CANNOT_RECOVER; | 194 | return DATAOUT_CANNOT_RECOVER; |
@@ -201,10 +201,10 @@ static int iscsit_dataout_check_unsolicited_sequence( | |||
201 | conn->sess->sess_ops->FirstBurstLength); | 201 | conn->sess->sess_ops->FirstBurstLength); |
202 | return DATAOUT_CANNOT_RECOVER; | 202 | return DATAOUT_CANNOT_RECOVER; |
203 | } | 203 | } |
204 | if (first_burst_len == cmd->data_length) { | 204 | if (first_burst_len == cmd->se_cmd.data_length) { |
205 | pr_err("Command ITT: 0x%08x reached" | 205 | pr_err("Command ITT: 0x%08x reached" |
206 | " ExpXferLen: %u, but ISCSI_FLAG_CMD_FINAL is not set. protocol" | 206 | " ExpXferLen: %u, but ISCSI_FLAG_CMD_FINAL is not set. protocol" |
207 | " error.\n", cmd->init_task_tag, cmd->data_length); | 207 | " error.\n", cmd->init_task_tag, cmd->se_cmd.data_length); |
208 | return DATAOUT_CANNOT_RECOVER; | 208 | return DATAOUT_CANNOT_RECOVER; |
209 | } | 209 | } |
210 | } | 210 | } |
@@ -294,7 +294,7 @@ static int iscsit_dataout_check_sequence( | |||
294 | if ((next_burst_len < | 294 | if ((next_burst_len < |
295 | conn->sess->sess_ops->MaxBurstLength) && | 295 | conn->sess->sess_ops->MaxBurstLength) && |
296 | ((cmd->write_data_done + payload_length) < | 296 | ((cmd->write_data_done + payload_length) < |
297 | cmd->data_length)) { | 297 | cmd->se_cmd.data_length)) { |
298 | pr_err("Command ITT: 0x%08x set ISCSI_FLAG_CMD_FINAL" | 298 | pr_err("Command ITT: 0x%08x set ISCSI_FLAG_CMD_FINAL" |
299 | " before end of DataOUT sequence, protocol" | 299 | " before end of DataOUT sequence, protocol" |
300 | " error.\n", cmd->init_task_tag); | 300 | " error.\n", cmd->init_task_tag); |
@@ -319,7 +319,7 @@ static int iscsit_dataout_check_sequence( | |||
319 | return DATAOUT_CANNOT_RECOVER; | 319 | return DATAOUT_CANNOT_RECOVER; |
320 | } | 320 | } |
321 | if ((cmd->write_data_done + payload_length) == | 321 | if ((cmd->write_data_done + payload_length) == |
322 | cmd->data_length) { | 322 | cmd->se_cmd.data_length) { |
323 | pr_err("Command ITT: 0x%08x reached" | 323 | pr_err("Command ITT: 0x%08x reached" |
324 | " last DataOUT PDU in sequence but ISCSI_FLAG_" | 324 | " last DataOUT PDU in sequence but ISCSI_FLAG_" |
325 | "CMD_FINAL is not set, protocol error.\n", | 325 | "CMD_FINAL is not set, protocol error.\n", |
@@ -640,7 +640,7 @@ static int iscsit_dataout_post_crc_passed( | |||
640 | 640 | ||
641 | cmd->write_data_done += payload_length; | 641 | cmd->write_data_done += payload_length; |
642 | 642 | ||
643 | if (cmd->write_data_done == cmd->data_length) | 643 | if (cmd->write_data_done == cmd->se_cmd.data_length) |
644 | return DATAOUT_SEND_TO_TRANSPORT; | 644 | return DATAOUT_SEND_TO_TRANSPORT; |
645 | else if (send_r2t) | 645 | else if (send_r2t) |
646 | return DATAOUT_SEND_R2T; | 646 | return DATAOUT_SEND_R2T; |
diff --git a/drivers/target/iscsi/iscsi_target_erl1.c b/drivers/target/iscsi/iscsi_target_erl1.c index 6deb8495d5f2..ecdd46deedda 100644 --- a/drivers/target/iscsi/iscsi_target_erl1.c +++ b/drivers/target/iscsi/iscsi_target_erl1.c | |||
@@ -1116,8 +1116,8 @@ static int iscsit_set_dataout_timeout_values( | |||
1116 | if (cmd->unsolicited_data) { | 1116 | if (cmd->unsolicited_data) { |
1117 | *offset = 0; | 1117 | *offset = 0; |
1118 | *length = (conn->sess->sess_ops->FirstBurstLength > | 1118 | *length = (conn->sess->sess_ops->FirstBurstLength > |
1119 | cmd->data_length) ? | 1119 | cmd->se_cmd.data_length) ? |
1120 | cmd->data_length : | 1120 | cmd->se_cmd.data_length : |
1121 | conn->sess->sess_ops->FirstBurstLength; | 1121 | conn->sess->sess_ops->FirstBurstLength; |
1122 | return 0; | 1122 | return 0; |
1123 | } | 1123 | } |
@@ -1188,8 +1188,8 @@ static void iscsit_handle_dataout_timeout(unsigned long data) | |||
1188 | if (conn->sess->sess_ops->DataPDUInOrder) { | 1188 | if (conn->sess->sess_ops->DataPDUInOrder) { |
1189 | pdu_offset = cmd->write_data_done; | 1189 | pdu_offset = cmd->write_data_done; |
1190 | if ((pdu_offset + (conn->sess->sess_ops->MaxBurstLength - | 1190 | if ((pdu_offset + (conn->sess->sess_ops->MaxBurstLength - |
1191 | cmd->next_burst_len)) > cmd->data_length) | 1191 | cmd->next_burst_len)) > cmd->se_cmd.data_length) |
1192 | pdu_length = (cmd->data_length - | 1192 | pdu_length = (cmd->se_cmd.data_length - |
1193 | cmd->write_data_done); | 1193 | cmd->write_data_done); |
1194 | else | 1194 | else |
1195 | pdu_length = (conn->sess->sess_ops->MaxBurstLength - | 1195 | pdu_length = (conn->sess->sess_ops->MaxBurstLength - |
diff --git a/drivers/target/iscsi/iscsi_target_seq_pdu_list.c b/drivers/target/iscsi/iscsi_target_seq_pdu_list.c index c69c7577ad14..d98276581a19 100644 --- a/drivers/target/iscsi/iscsi_target_seq_pdu_list.c +++ b/drivers/target/iscsi/iscsi_target_seq_pdu_list.c | |||
@@ -226,11 +226,10 @@ static void iscsit_determine_counts_for_list( | |||
226 | 226 | ||
227 | if ((bl->type == PDULIST_UNSOLICITED) || | 227 | if ((bl->type == PDULIST_UNSOLICITED) || |
228 | (bl->type == PDULIST_IMMEDIATE_AND_UNSOLICITED)) | 228 | (bl->type == PDULIST_IMMEDIATE_AND_UNSOLICITED)) |
229 | unsolicited_data_length = (cmd->data_length > | 229 | unsolicited_data_length = min(cmd->se_cmd.data_length, |
230 | conn->sess->sess_ops->FirstBurstLength) ? | 230 | conn->sess->sess_ops->FirstBurstLength); |
231 | conn->sess->sess_ops->FirstBurstLength : cmd->data_length; | ||
232 | 231 | ||
233 | while (offset < cmd->data_length) { | 232 | while (offset < cmd->se_cmd.data_length) { |
234 | *pdu_count += 1; | 233 | *pdu_count += 1; |
235 | 234 | ||
236 | if (check_immediate) { | 235 | if (check_immediate) { |
@@ -244,10 +243,10 @@ static void iscsit_determine_counts_for_list( | |||
244 | } | 243 | } |
245 | if (unsolicited_data_length > 0) { | 244 | if (unsolicited_data_length > 0) { |
246 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) | 245 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) |
247 | >= cmd->data_length) { | 246 | >= cmd->se_cmd.data_length) { |
248 | unsolicited_data_length -= | 247 | unsolicited_data_length -= |
249 | (cmd->data_length - offset); | 248 | (cmd->se_cmd.data_length - offset); |
250 | offset += (cmd->data_length - offset); | 249 | offset += (cmd->se_cmd.data_length - offset); |
251 | continue; | 250 | continue; |
252 | } | 251 | } |
253 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) | 252 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) |
@@ -268,8 +267,8 @@ static void iscsit_determine_counts_for_list( | |||
268 | continue; | 267 | continue; |
269 | } | 268 | } |
270 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >= | 269 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >= |
271 | cmd->data_length) { | 270 | cmd->se_cmd.data_length) { |
272 | offset += (cmd->data_length - offset); | 271 | offset += (cmd->se_cmd.data_length - offset); |
273 | continue; | 272 | continue; |
274 | } | 273 | } |
275 | if ((burstlength + conn->conn_ops->MaxRecvDataSegmentLength) >= | 274 | if ((burstlength + conn->conn_ops->MaxRecvDataSegmentLength) >= |
@@ -311,11 +310,10 @@ static int iscsit_build_pdu_and_seq_list( | |||
311 | 310 | ||
312 | if ((bl->type == PDULIST_UNSOLICITED) || | 311 | if ((bl->type == PDULIST_UNSOLICITED) || |
313 | (bl->type == PDULIST_IMMEDIATE_AND_UNSOLICITED)) | 312 | (bl->type == PDULIST_IMMEDIATE_AND_UNSOLICITED)) |
314 | unsolicited_data_length = (cmd->data_length > | 313 | unsolicited_data_length = min(cmd->se_cmd.data_length, |
315 | conn->sess->sess_ops->FirstBurstLength) ? | 314 | conn->sess->sess_ops->FirstBurstLength); |
316 | conn->sess->sess_ops->FirstBurstLength : cmd->data_length; | ||
317 | 315 | ||
318 | while (offset < cmd->data_length) { | 316 | while (offset < cmd->se_cmd.data_length) { |
319 | pdu_count++; | 317 | pdu_count++; |
320 | if (!datapduinorder) { | 318 | if (!datapduinorder) { |
321 | pdu[i].offset = offset; | 319 | pdu[i].offset = offset; |
@@ -351,21 +349,21 @@ static int iscsit_build_pdu_and_seq_list( | |||
351 | if (unsolicited_data_length > 0) { | 349 | if (unsolicited_data_length > 0) { |
352 | if ((offset + | 350 | if ((offset + |
353 | conn->conn_ops->MaxRecvDataSegmentLength) >= | 351 | conn->conn_ops->MaxRecvDataSegmentLength) >= |
354 | cmd->data_length) { | 352 | cmd->se_cmd.data_length) { |
355 | if (!datapduinorder) { | 353 | if (!datapduinorder) { |
356 | pdu[i].type = PDUTYPE_UNSOLICITED; | 354 | pdu[i].type = PDUTYPE_UNSOLICITED; |
357 | pdu[i].length = | 355 | pdu[i].length = |
358 | (cmd->data_length - offset); | 356 | (cmd->se_cmd.data_length - offset); |
359 | } | 357 | } |
360 | if (!datasequenceinorder) { | 358 | if (!datasequenceinorder) { |
361 | seq[seq_no].type = SEQTYPE_UNSOLICITED; | 359 | seq[seq_no].type = SEQTYPE_UNSOLICITED; |
362 | seq[seq_no].pdu_count = pdu_count; | 360 | seq[seq_no].pdu_count = pdu_count; |
363 | seq[seq_no].xfer_len = (burstlength + | 361 | seq[seq_no].xfer_len = (burstlength + |
364 | (cmd->data_length - offset)); | 362 | (cmd->se_cmd.data_length - offset)); |
365 | } | 363 | } |
366 | unsolicited_data_length -= | 364 | unsolicited_data_length -= |
367 | (cmd->data_length - offset); | 365 | (cmd->se_cmd.data_length - offset); |
368 | offset += (cmd->data_length - offset); | 366 | offset += (cmd->se_cmd.data_length - offset); |
369 | continue; | 367 | continue; |
370 | } | 368 | } |
371 | if ((offset + | 369 | if ((offset + |
@@ -407,18 +405,18 @@ static int iscsit_build_pdu_and_seq_list( | |||
407 | continue; | 405 | continue; |
408 | } | 406 | } |
409 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >= | 407 | if ((offset + conn->conn_ops->MaxRecvDataSegmentLength) >= |
410 | cmd->data_length) { | 408 | cmd->se_cmd.data_length) { |
411 | if (!datapduinorder) { | 409 | if (!datapduinorder) { |
412 | pdu[i].type = PDUTYPE_NORMAL; | 410 | pdu[i].type = PDUTYPE_NORMAL; |
413 | pdu[i].length = (cmd->data_length - offset); | 411 | pdu[i].length = (cmd->se_cmd.data_length - offset); |
414 | } | 412 | } |
415 | if (!datasequenceinorder) { | 413 | if (!datasequenceinorder) { |
416 | seq[seq_no].type = SEQTYPE_NORMAL; | 414 | seq[seq_no].type = SEQTYPE_NORMAL; |
417 | seq[seq_no].pdu_count = pdu_count; | 415 | seq[seq_no].pdu_count = pdu_count; |
418 | seq[seq_no].xfer_len = (burstlength + | 416 | seq[seq_no].xfer_len = (burstlength + |
419 | (cmd->data_length - offset)); | 417 | (cmd->se_cmd.data_length - offset)); |
420 | } | 418 | } |
421 | offset += (cmd->data_length - offset); | 419 | offset += (cmd->se_cmd.data_length - offset); |
422 | continue; | 420 | continue; |
423 | } | 421 | } |
424 | if ((burstlength + conn->conn_ops->MaxRecvDataSegmentLength) >= | 422 | if ((burstlength + conn->conn_ops->MaxRecvDataSegmentLength) >= |
diff --git a/drivers/target/iscsi/iscsi_target_tmr.c b/drivers/target/iscsi/iscsi_target_tmr.c index 3f025fa10467..f4e640b51fd1 100644 --- a/drivers/target/iscsi/iscsi_target_tmr.c +++ b/drivers/target/iscsi/iscsi_target_tmr.c | |||
@@ -269,9 +269,9 @@ static int iscsit_task_reassign_complete_write( | |||
269 | offset = cmd->next_burst_len = cmd->write_data_done; | 269 | offset = cmd->next_burst_len = cmd->write_data_done; |
270 | 270 | ||
271 | if ((conn->sess->sess_ops->FirstBurstLength - offset) >= | 271 | if ((conn->sess->sess_ops->FirstBurstLength - offset) >= |
272 | cmd->data_length) { | 272 | cmd->se_cmd.data_length) { |
273 | no_build_r2ts = 1; | 273 | no_build_r2ts = 1; |
274 | length = (cmd->data_length - offset); | 274 | length = (cmd->se_cmd.data_length - offset); |
275 | } else | 275 | } else |
276 | length = (conn->sess->sess_ops->FirstBurstLength - offset); | 276 | length = (conn->sess->sess_ops->FirstBurstLength - offset); |
277 | 277 | ||
diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c index 66a6e9ba86fe..1f5a456f26b4 100644 --- a/drivers/target/iscsi/iscsi_target_util.c +++ b/drivers/target/iscsi/iscsi_target_util.c | |||
@@ -379,14 +379,14 @@ int iscsit_check_unsolicited_dataout(struct iscsi_cmd *cmd, unsigned char *buf) | |||
379 | if (!(hdr->flags & ISCSI_FLAG_CMD_FINAL)) | 379 | if (!(hdr->flags & ISCSI_FLAG_CMD_FINAL)) |
380 | return 0; | 380 | return 0; |
381 | 381 | ||
382 | if (((cmd->first_burst_len + payload_length) != cmd->data_length) && | 382 | if (((cmd->first_burst_len + payload_length) != cmd->se_cmd.data_length) && |
383 | ((cmd->first_burst_len + payload_length) != | 383 | ((cmd->first_burst_len + payload_length) != |
384 | conn->sess->sess_ops->FirstBurstLength)) { | 384 | conn->sess->sess_ops->FirstBurstLength)) { |
385 | pr_err("Unsolicited non-immediate data received %u" | 385 | pr_err("Unsolicited non-immediate data received %u" |
386 | " does not equal FirstBurstLength: %u, and does" | 386 | " does not equal FirstBurstLength: %u, and does" |
387 | " not equal ExpXferLen %u.\n", | 387 | " not equal ExpXferLen %u.\n", |
388 | (cmd->first_burst_len + payload_length), | 388 | (cmd->first_burst_len + payload_length), |
389 | conn->sess->sess_ops->FirstBurstLength, cmd->data_length); | 389 | conn->sess->sess_ops->FirstBurstLength, cmd->se_cmd.data_length); |
390 | transport_send_check_condition_and_sense(se_cmd, | 390 | transport_send_check_condition_and_sense(se_cmd, |
391 | TCM_INCORRECT_AMOUNT_OF_DATA, 0); | 391 | TCM_INCORRECT_AMOUNT_OF_DATA, 0); |
392 | return -1; | 392 | return -1; |