diff options
Diffstat (limited to 'drivers/scsi/libata-scsi.c')
| -rw-r--r-- | drivers/scsi/libata-scsi.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c index 2d328b3af067..3a4f40b251fb 100644 --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c | |||
| @@ -735,6 +735,11 @@ int ata_scsi_error(struct Scsi_Host *host) | |||
| 735 | 735 | ||
| 736 | DPRINTK("ENTER\n"); | 736 | DPRINTK("ENTER\n"); |
| 737 | 737 | ||
| 738 | spin_lock_irqsave(&ap->host_set->lock, flags); | ||
| 739 | assert(!(ap->flags & ATA_FLAG_IN_EH)); | ||
| 740 | ap->flags |= ATA_FLAG_IN_EH; | ||
| 741 | spin_unlock_irqrestore(&ap->host_set->lock, flags); | ||
| 742 | |||
| 738 | ap = (struct ata_port *) &host->hostdata[0]; | 743 | ap = (struct ata_port *) &host->hostdata[0]; |
| 739 | ap->ops->eng_timeout(ap); | 744 | ap->ops->eng_timeout(ap); |
| 740 | 745 | ||
| @@ -742,6 +747,10 @@ int ata_scsi_error(struct Scsi_Host *host) | |||
| 742 | 747 | ||
| 743 | scsi_eh_flush_done_q(&ap->eh_done_q); | 748 | scsi_eh_flush_done_q(&ap->eh_done_q); |
| 744 | 749 | ||
| 750 | spin_lock_irqsave(&ap->host_set->lock, flags); | ||
| 751 | ap->flags &= ~ATA_FLAG_IN_EH; | ||
| 752 | spin_unlock_irqrestore(&ap->host_set->lock, flags); | ||
| 753 | |||
| 745 | DPRINTK("EXIT\n"); | 754 | DPRINTK("EXIT\n"); |
| 746 | return 0; | 755 | return 0; |
| 747 | } | 756 | } |
