| From b0e062aec578c756d1aea4b5809294488366a6e8 Mon Sep 17 00:00:00 2001 |
| From: Nicholas Bellinger <nab@linux-iscsi.org> |
| Date: Tue, 11 Oct 2011 06:02:48 +0000 |
| Subject: target: Prevent TRANSPORT_FREE_CMD_INTR processing in core_tmr_drain_cmd_list |
| |
| From: Nicholas Bellinger <nab@linux-iscsi.org> |
| |
| 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> |
| |
| --- |
| drivers/target/target_core_tmr.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| --- 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); |