diff options
Diffstat (limited to 'drivers/scsi/scsi.c')
-rw-r--r-- | drivers/scsi/scsi.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index 2ac3cb2b9081..f8b79d401d58 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c | |||
@@ -754,8 +754,12 @@ int scsi_dispatch_cmd(struct scsi_cmnd *cmd) | |||
754 | } | 754 | } |
755 | spin_unlock_irqrestore(host->host_lock, flags); | 755 | spin_unlock_irqrestore(host->host_lock, flags); |
756 | if (rtn) { | 756 | if (rtn) { |
757 | scsi_queue_insert(cmd, (rtn == SCSI_MLQUEUE_DEVICE_BUSY) ? | 757 | if (rtn != SCSI_MLQUEUE_DEVICE_BUSY && |
758 | rtn : SCSI_MLQUEUE_HOST_BUSY); | 758 | rtn != SCSI_MLQUEUE_TARGET_BUSY) |
759 | rtn = SCSI_MLQUEUE_HOST_BUSY; | ||
760 | |||
761 | scsi_queue_insert(cmd, rtn); | ||
762 | |||
759 | SCSI_LOG_MLQUEUE(3, | 763 | SCSI_LOG_MLQUEUE(3, |
760 | printk("queuecommand : request rejected\n")); | 764 | printk("queuecommand : request rejected\n")); |
761 | } | 765 | } |
@@ -800,6 +804,7 @@ static struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd) | |||
800 | void scsi_finish_command(struct scsi_cmnd *cmd) | 804 | void scsi_finish_command(struct scsi_cmnd *cmd) |
801 | { | 805 | { |
802 | struct scsi_device *sdev = cmd->device; | 806 | struct scsi_device *sdev = cmd->device; |
807 | struct scsi_target *starget = scsi_target(sdev); | ||
803 | struct Scsi_Host *shost = sdev->host; | 808 | struct Scsi_Host *shost = sdev->host; |
804 | struct scsi_driver *drv; | 809 | struct scsi_driver *drv; |
805 | unsigned int good_bytes; | 810 | unsigned int good_bytes; |
@@ -815,6 +820,7 @@ void scsi_finish_command(struct scsi_cmnd *cmd) | |||
815 | * XXX(hch): What about locking? | 820 | * XXX(hch): What about locking? |
816 | */ | 821 | */ |
817 | shost->host_blocked = 0; | 822 | shost->host_blocked = 0; |
823 | starget->target_blocked = 0; | ||
818 | sdev->device_blocked = 0; | 824 | sdev->device_blocked = 0; |
819 | 825 | ||
820 | /* | 826 | /* |