提交 47b1584c 编写于 作者: A Alex Leung 提交者: Nicholas Bellinger

target: Add check to prevent Abort Task from aborting itself

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: NAlex Leung <alex.leung@emulex.com>
Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
上级 bc005869
...@@ -130,6 +130,11 @@ void core_tmr_abort_task( ...@@ -130,6 +130,11 @@ void core_tmr_abort_task(
if (dev != se_cmd->se_dev) if (dev != se_cmd->se_dev)
continue; 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); ref_tag = se_cmd->se_tfo->get_task_tag(se_cmd);
if (tmr->ref_task_tag != ref_tag) if (tmr->ref_task_tag != ref_tag)
continue; continue;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册