diff options
author | Christoph Hellwig <hch@infradead.org> | 2011-12-21 14:13:47 -0500 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2012-02-25 17:37:45 -0500 |
commit | 7d680f3b74dd6f0f57569eeeee8c257790ceaa96 (patch) | |
tree | e0797ab722c222213b7cbe4fa9ba4a61db2d8b0c /drivers/target/iscsi | |
parent | b01543dfe67bb1d191998e90d20534dc354de059 (diff) |
target: replace various cmd flags with a transport state
Replace various atomic_ts used as flags in struct se_cmd with a single
transport_state bitmap that requires t_state_lock to be held for modifications.
In the target core that assumption generally is true, but some recently added
code in the SRP target had to grow new lock calls. I can't say I like the way
how it messes with the command state directly, but let's leave that for later.
(Re-add missing ib_srpt.c changes that nab dropped..)
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/iscsi')
-rw-r--r-- | drivers/target/iscsi/iscsi_target.c | 2 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_erl1.c | 2 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_tmr.c | 6 |
3 files changed, 5 insertions, 5 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index 44262908def5..bf0e8e75a272 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c | |||
@@ -1363,7 +1363,7 @@ static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf) | |||
1363 | * outstanding_r2ts reaches zero, go ahead and send the delayed | 1363 | * outstanding_r2ts reaches zero, go ahead and send the delayed |
1364 | * TASK_ABORTED status. | 1364 | * TASK_ABORTED status. |
1365 | */ | 1365 | */ |
1366 | if (atomic_read(&se_cmd->t_transport_aborted) != 0) { | 1366 | if (se_cmd->transport_state & CMD_T_ABORTED) { |
1367 | if (hdr->flags & ISCSI_FLAG_CMD_FINAL) | 1367 | if (hdr->flags & ISCSI_FLAG_CMD_FINAL) |
1368 | if (--cmd->outstanding_r2ts < 1) { | 1368 | if (--cmd->outstanding_r2ts < 1) { |
1369 | iscsit_stop_dataout_timer(cmd); | 1369 | iscsit_stop_dataout_timer(cmd); |
diff --git a/drivers/target/iscsi/iscsi_target_erl1.c b/drivers/target/iscsi/iscsi_target_erl1.c index 27901e37c125..006f605edb08 100644 --- a/drivers/target/iscsi/iscsi_target_erl1.c +++ b/drivers/target/iscsi/iscsi_target_erl1.c | |||
@@ -416,7 +416,7 @@ static int iscsit_handle_recovery_datain( | |||
416 | struct iscsi_datain_req *dr; | 416 | struct iscsi_datain_req *dr; |
417 | struct se_cmd *se_cmd = &cmd->se_cmd; | 417 | struct se_cmd *se_cmd = &cmd->se_cmd; |
418 | 418 | ||
419 | if (!atomic_read(&se_cmd->t_transport_complete)) { | 419 | if (!(se_cmd->transport_state & CMD_T_COMPLETE)) { |
420 | pr_err("Ignoring ITT: 0x%08x Data SNACK\n", | 420 | pr_err("Ignoring ITT: 0x%08x Data SNACK\n", |
421 | cmd->init_task_tag); | 421 | cmd->init_task_tag); |
422 | return 0; | 422 | return 0; |
diff --git a/drivers/target/iscsi/iscsi_target_tmr.c b/drivers/target/iscsi/iscsi_target_tmr.c index 255ed35da815..e01da9d2b37e 100644 --- a/drivers/target/iscsi/iscsi_target_tmr.c +++ b/drivers/target/iscsi/iscsi_target_tmr.c | |||
@@ -250,7 +250,7 @@ static int iscsit_task_reassign_complete_write( | |||
250 | * so if we have received all DataOUT we can safety ignore Initiator. | 250 | * so if we have received all DataOUT we can safety ignore Initiator. |
251 | */ | 251 | */ |
252 | if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) { | 252 | if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) { |
253 | if (!atomic_read(&cmd->se_cmd.t_transport_sent)) { | 253 | if (!(cmd->se_cmd.transport_state & CMD_T_SENT)) { |
254 | pr_debug("WRITE ITT: 0x%08x: t_state: %d" | 254 | pr_debug("WRITE ITT: 0x%08x: t_state: %d" |
255 | " never sent to transport\n", | 255 | " never sent to transport\n", |
256 | cmd->init_task_tag, cmd->se_cmd.t_state); | 256 | cmd->init_task_tag, cmd->se_cmd.t_state); |
@@ -314,7 +314,7 @@ static int iscsit_task_reassign_complete_read( | |||
314 | cmd->acked_data_sn = (tmr_req->exp_data_sn - 1); | 314 | cmd->acked_data_sn = (tmr_req->exp_data_sn - 1); |
315 | } | 315 | } |
316 | 316 | ||
317 | if (!atomic_read(&cmd->se_cmd.t_transport_sent)) { | 317 | if (!(cmd->se_cmd.transport_state & CMD_T_SENT)) { |
318 | pr_debug("READ ITT: 0x%08x: t_state: %d never sent to" | 318 | pr_debug("READ ITT: 0x%08x: t_state: %d never sent to" |
319 | " transport\n", cmd->init_task_tag, | 319 | " transport\n", cmd->init_task_tag, |
320 | cmd->se_cmd.t_state); | 320 | cmd->se_cmd.t_state); |
@@ -322,7 +322,7 @@ static int iscsit_task_reassign_complete_read( | |||
322 | return 0; | 322 | return 0; |
323 | } | 323 | } |
324 | 324 | ||
325 | if (!atomic_read(&se_cmd->t_transport_complete)) { | 325 | if (!(se_cmd->transport_state & CMD_T_COMPLETE)) { |
326 | pr_err("READ ITT: 0x%08x: t_state: %d, never returned" | 326 | pr_err("READ ITT: 0x%08x: t_state: %d, never returned" |
327 | " from transport\n", cmd->init_task_tag, | 327 | " from transport\n", cmd->init_task_tag, |
328 | cmd->se_cmd.t_state); | 328 | cmd->se_cmd.t_state); |