]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
scsi: target/core: Reduce the amount of code executed with a spinlock held
authorBart Van Assche <bvanassche@acm.org>
Tue, 27 Nov 2018 23:52:04 +0000 (15:52 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 8 Dec 2018 02:22:55 +0000 (21:22 -0500)
Due to the "make ABORT and LUN RESET handling synchronous" patch, cmd->work
is only modified from the regular command execution path and no longer
asynchronously by the code that executes task management functions. Since
the regular command execution code is sequential per command, no locking is
required to manipulate cmd->work. Hence stop protecting cmd->work
manipulations with locking.

Cc: Nicholas Bellinger <nab@linux-iscsi.org>
Cc: Mike Christie <mchristi@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: David Disseldorp <ddiss@suse.de>
Cc: Hannes Reinecke <hare@suse.de>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_transport.c

index 45c8fd13b845add21c5620f29b251f7e8f8b3c57..f60b9d1ebb33d7926d3798e2aca353dd614dfbd4 100644 (file)
@@ -853,16 +853,12 @@ void target_complete_cmd(struct se_cmd *cmd, u8 scsi_status)
                break;
        }
 
-       if (!success) {
-               INIT_WORK(&cmd->work, target_complete_failure_work);
-       } else {
-               INIT_WORK(&cmd->work, target_complete_ok_work);
-       }
-
        cmd->t_state = TRANSPORT_COMPLETE;
        cmd->transport_state |= (CMD_T_COMPLETE | CMD_T_ACTIVE);
        spin_unlock_irqrestore(&cmd->t_state_lock, flags);
 
+       INIT_WORK(&cmd->work, success ? target_complete_ok_work :
+                 target_complete_failure_work);
        if (cmd->se_cmd_flags & SCF_USE_CPUID)
                queue_work_on(cmd->cpuid, target_completion_wq, &cmd->work);
        else