summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bellinger <nab@linux-iscsi.org>2011-10-11 06:02:48 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2011-11-11 09:42:32 -0800
commitbe9f40a76784d667ef3743cd756f1cec4ea4e714 (patch)
tree8f96b62641d2f221acaf38edf93a26108f683c87
parent6f47552250e7d3a1bab3e75cc9e36015a7fa93f9 (diff)
target: Prevent TRANSPORT_FREE_CMD_INTR processing in core_tmr_drain_cmd_list
commit b0e062aec578c756d1aea4b5809294488366a6e8 upstream. This patch contains a bugfix for TMR LUN_RESET related to TRANSPORT_FREE_CMD_INTR operation, where core_tmr_drain_cmd_list() will now skip processing for this case to prevent an ABORT_TASK status from being returned for descriptors that are already queued up to be released by processing thread context. Cc: Roland Dreier <roland@purestorage.com> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/target/target_core_tmr.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/target/target_core_tmr.c b/drivers/target/target_core_tmr.c
index 7bce92fc9de6..44c03d163b4a 100644
--- a/drivers/target/target_core_tmr.c
+++ b/drivers/target/target_core_tmr.c
@@ -337,6 +337,16 @@ int core_tmr_lun_reset(
*/
if (prout_cmd == cmd)
continue;
+ /*
+ * Skip direct processing of TRANSPORT_FREE_CMD_INTR for
+ * HW target mode fabrics.
+ */
+ spin_lock(&cmd->t_state_lock);
+ if (cmd->t_state == TRANSPORT_FREE_CMD_INTR) {
+ spin_unlock(&cmd->t_state_lock);
+ continue;
+ }
+ spin_unlock(&cmd->t_state_lock);
atomic_dec(&cmd->t_transport_queue_active);
atomic_dec(&qobj->queue_cnt);