]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
target: Make core_tmr_abort_task() consider all commands
authorBart Van Assche <bart.vanassche@sandisk.com>
Fri, 23 Dec 2016 12:47:38 +0000 (13:47 +0100)
committerNicholas Bellinger <nab@linux-iscsi.org>
Thu, 9 Feb 2017 08:39:11 +0000 (00:39 -0800)
It is possible that two commands with the same tag are present on
sess_cmd_list because commands are removed from sess_cmd_list after
a response has been sent to the initiator. Hence continue searching
through sess_cmd_list even if a matching tag has already been found.

Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Himanshu Madhani <himanshu.madhani@cavium.com>
Cc: Giridhar Malavali <giridhar.malavali@cavium.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_tmr.c

index 4f229e711e1c1cfc0134abb71b617f9511a6e606..311dc3c2f1dc5c0a2a2abe2af3c76bd5c0911a1b 100644 (file)
@@ -175,10 +175,9 @@ void core_tmr_abort_task(
                printk("ABORT_TASK: Found referenced %s task_tag: %llu\n",
                        se_cmd->se_tfo->get_fabric_name(), ref_tag);
 
-               if (!__target_check_io_state(se_cmd, se_sess, 0)) {
-                       spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
-                       goto out;
-               }
+               if (!__target_check_io_state(se_cmd, se_sess, 0))
+                       continue;
+
                list_del_init(&se_cmd->se_cmd_list);
                spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
 
@@ -195,7 +194,6 @@ void core_tmr_abort_task(
        }
        spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
 
-out:
        printk("ABORT_TASK: Sending TMR_TASK_DOES_NOT_EXIST for ref_tag: %lld\n",
                        tmr->ref_task_tag);
        tmr->response = TMR_TASK_DOES_NOT_EXIST;