Răsfoiți Sursa

target: Prevent TRANSPORT_FREE_CMD_INTR processing in core_tmr_drain_cmd_list

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>
Cc: stable@kernel.org
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com>
Nicholas Bellinger 13 ani în urmă
părinte
comite
b0e062aec5
1 a modificat fișierele cu 10 adăugiri și 0 ștergeri
  1. 10 0
      drivers/target/target_core_tmr.c

+ 10 - 0
drivers/target/target_core_tmr.c

@@ -339,6 +339,16 @@ static void core_tmr_drain_cmd_list(
 		 */
 		 */
 		if (prout_cmd == cmd)
 		if (prout_cmd == cmd)
 			continue;
 			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_set(&cmd->t_transport_queue_active, 0);
 		atomic_set(&cmd->t_transport_queue_active, 0);
 		atomic_dec(&qobj->queue_cnt);
 		atomic_dec(&qobj->queue_cnt);