| Date | Wed, 09 Nov 2011 13:31:28 -0800 | From | Greg KH <> | Subject | [041/264] target: Prevent TRANSPORT_FREE_CMD_INTR processing in core_tmr_drain_cmd_list |
| |
3.1-stable review patch. If anyone has any objections, please let me know.
------------------
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);
|