diff options
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
-rw-r--r-- | drivers/scsi/scsi_lib.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index d837dc180522..b9a8ddd77eef 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -645,16 +645,18 @@ static void scsi_mq_free_sgtables(struct scsi_cmnd *cmd) | |||
645 | static void scsi_mq_uninit_cmd(struct scsi_cmnd *cmd) | 645 | static void scsi_mq_uninit_cmd(struct scsi_cmnd *cmd) |
646 | { | 646 | { |
647 | struct scsi_device *sdev = cmd->device; | 647 | struct scsi_device *sdev = cmd->device; |
648 | struct Scsi_Host *shost = sdev->host; | ||
648 | unsigned long flags; | 649 | unsigned long flags; |
649 | 650 | ||
650 | BUG_ON(list_empty(&cmd->list)); | ||
651 | |||
652 | scsi_mq_free_sgtables(cmd); | 651 | scsi_mq_free_sgtables(cmd); |
653 | scsi_uninit_cmd(cmd); | 652 | scsi_uninit_cmd(cmd); |
654 | 653 | ||
655 | spin_lock_irqsave(&sdev->list_lock, flags); | 654 | if (shost->use_cmd_list) { |
656 | list_del_init(&cmd->list); | 655 | BUG_ON(list_empty(&cmd->list)); |
657 | spin_unlock_irqrestore(&sdev->list_lock, flags); | 656 | spin_lock_irqsave(&sdev->list_lock, flags); |
657 | list_del_init(&cmd->list); | ||
658 | spin_unlock_irqrestore(&sdev->list_lock, flags); | ||
659 | } | ||
658 | } | 660 | } |
659 | 661 | ||
660 | /* | 662 | /* |
@@ -1815,13 +1817,11 @@ static int scsi_mq_prep_fn(struct request *req) | |||
1815 | INIT_DELAYED_WORK(&cmd->abort_work, scmd_eh_abort_handler); | 1817 | INIT_DELAYED_WORK(&cmd->abort_work, scmd_eh_abort_handler); |
1816 | cmd->jiffies_at_alloc = jiffies; | 1818 | cmd->jiffies_at_alloc = jiffies; |
1817 | 1819 | ||
1818 | /* | 1820 | if (shost->use_cmd_list) { |
1819 | * XXX: cmd_list lookups are only used by two drivers, try to get | 1821 | spin_lock_irq(&sdev->list_lock); |
1820 | * rid of this list in common code. | 1822 | list_add_tail(&cmd->list, &sdev->cmd_list); |
1821 | */ | 1823 | spin_unlock_irq(&sdev->list_lock); |
1822 | spin_lock_irq(&sdev->list_lock); | 1824 | } |
1823 | list_add_tail(&cmd->list, &sdev->cmd_list); | ||
1824 | spin_unlock_irq(&sdev->list_lock); | ||
1825 | 1825 | ||
1826 | sg = (void *)cmd + sizeof(struct scsi_cmnd) + shost->hostt->cmd_size; | 1826 | sg = (void *)cmd + sizeof(struct scsi_cmnd) + shost->hostt->cmd_size; |
1827 | cmd->sdb.table.sgl = sg; | 1827 | cmd->sdb.table.sgl = sg; |