target: Delete tmr from list before processing
authorBart Van Assche <bart.vanassche@sandisk.com>
Wed, 15 Feb 2017 00:25:54 +0000 (16:25 -0800)
committerNicholas Bellinger <nab@linux-iscsi.org>
Mon, 20 Feb 2017 22:37:19 +0000 (14:37 -0800)
This patch does an explicit list_del_init(tmr->tmr_list) in
core_tmr_drain_tmr_list() before starting processing of
outstanding TMRs to abort, instead of explicitly checking
which TMR descriptor matches the caller.

Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: David Disseldorp <ddiss@suse.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_tmr.c

index 311dc3c..a806d9b 100644 (file)
@@ -215,13 +215,8 @@ static void core_tmr_drain_tmr_list(
         * LUN_RESET tmr..
         */
        spin_lock_irqsave(&dev->se_tmr_lock, flags);
+       list_del_init(&tmr->tmr_list);
        list_for_each_entry_safe(tmr_p, tmr_pp, &dev->dev_tmr_list, tmr_list) {
-               /*
-                * Allow the received TMR to return with FUNCTION_COMPLETE.
-                */
-               if (tmr_p == tmr)
-                       continue;
-
                cmd = tmr_p->task_cmd;
                if (!cmd) {
                        pr_err("Unable to locate struct se_cmd for TMR\n");