Skip to content

Commit

Permalink
target: Add check to prevent Abort Task from aborting itself
Browse files Browse the repository at this point in the history
This patch addresses an issue that occurs when an ABTS is received
for an se_cmd that completes just before the sess_cmd_list is searched
in core_tmr_abort_task(). When the sess_cmd_list is searched, since
the ABTS and the FCP_CMND being aborted (that just completed) both
have the same OXID, TFO->get_task_tag(TMR) returns a value that
matches tmr->ref_task_tag (from TFO->get_task_tag(FCP_CMND)), and
the Abort Task tries to abort itself. When this occurs,
transport_wait_for_tasks() hangs forever since the TMR is waiting
for itself to finish.

This patch adds a check to core_tmr_abort_task() to make sure the
TMR does not attempt to abort itself.

Signed-off-by: Alex Leung <alex.leung@emulex.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
  • Loading branch information
Alex Leung authored and Nicholas Bellinger committed Apr 11, 2014
1 parent bc00586 commit 47b1584
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions drivers/target/target_core_tmr.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,11 @@ void core_tmr_abort_task(

if (dev != se_cmd->se_dev)
continue;

/* skip se_cmd associated with tmr */
if (tmr->task_cmd == se_cmd)
continue;

ref_tag = se_cmd->se_tfo->get_task_tag(se_cmd);
if (tmr->ref_task_tag != ref_tag)
continue;
Expand Down

0 comments on commit 47b1584

Please sign in to comment.