diff options
-rw-r--r-- | drivers/ata/libata-eh.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index e16850e8d2f8..073b88156b3c 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -589,9 +589,14 @@ void ata_scsi_error(struct Scsi_Host *host) | |||
589 | struct ata_port *ap = ata_shost_to_port(host); | 589 | struct ata_port *ap = ata_shost_to_port(host); |
590 | int i; | 590 | int i; |
591 | unsigned long flags; | 591 | unsigned long flags; |
592 | LIST_HEAD(eh_work_q); | ||
592 | 593 | ||
593 | DPRINTK("ENTER\n"); | 594 | DPRINTK("ENTER\n"); |
594 | 595 | ||
596 | spin_lock_irqsave(host->host_lock, flags); | ||
597 | list_splice_init(&host->eh_cmd_q, &eh_work_q); | ||
598 | spin_unlock_irqrestore(host->host_lock, flags); | ||
599 | |||
595 | /* make sure sff pio task is not running */ | 600 | /* make sure sff pio task is not running */ |
596 | ata_sff_flush_pio_task(ap); | 601 | ata_sff_flush_pio_task(ap); |
597 | 602 | ||
@@ -627,7 +632,7 @@ void ata_scsi_error(struct Scsi_Host *host) | |||
627 | if (ap->ops->lost_interrupt) | 632 | if (ap->ops->lost_interrupt) |
628 | ap->ops->lost_interrupt(ap); | 633 | ap->ops->lost_interrupt(ap); |
629 | 634 | ||
630 | list_for_each_entry_safe(scmd, tmp, &host->eh_cmd_q, eh_entry) { | 635 | list_for_each_entry_safe(scmd, tmp, &eh_work_q, eh_entry) { |
631 | struct ata_queued_cmd *qc; | 636 | struct ata_queued_cmd *qc; |
632 | 637 | ||
633 | for (i = 0; i < ATA_MAX_QUEUE; i++) { | 638 | for (i = 0; i < ATA_MAX_QUEUE; i++) { |
@@ -762,7 +767,7 @@ void ata_scsi_error(struct Scsi_Host *host) | |||
762 | } | 767 | } |
763 | 768 | ||
764 | /* finish or retry handled scmd's and clean up */ | 769 | /* finish or retry handled scmd's and clean up */ |
765 | WARN_ON(host->host_failed || !list_empty(&host->eh_cmd_q)); | 770 | WARN_ON(host->host_failed || !list_empty(&eh_work_q)); |
766 | 771 | ||
767 | scsi_eh_flush_done_q(&ap->eh_done_q); | 772 | scsi_eh_flush_done_q(&ap->eh_done_q); |
768 | 773 | ||