diff options
Diffstat (limited to 'drivers/scsi/libata-eh.c')
-rw-r--r-- | drivers/scsi/libata-eh.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c index 70c132bef68e..30a83a57a12f 100644 --- a/drivers/scsi/libata-eh.c +++ b/drivers/scsi/libata-eh.c | |||
@@ -46,6 +46,7 @@ | |||
46 | #include "libata.h" | 46 | #include "libata.h" |
47 | 47 | ||
48 | static void __ata_port_freeze(struct ata_port *ap); | 48 | static void __ata_port_freeze(struct ata_port *ap); |
49 | static void ata_eh_finish(struct ata_port *ap); | ||
49 | 50 | ||
50 | static void ata_ering_record(struct ata_ering *ering, int is_io, | 51 | static void ata_ering_record(struct ata_ering *ering, int is_io, |
51 | unsigned int err_mask) | 52 | unsigned int err_mask) |
@@ -242,8 +243,11 @@ void ata_scsi_error(struct Scsi_Host *host) | |||
242 | 243 | ||
243 | spin_unlock_irqrestore(hs_lock, flags); | 244 | spin_unlock_irqrestore(hs_lock, flags); |
244 | 245 | ||
245 | /* invoke EH */ | 246 | /* invoke EH. if unloading, just finish failed qcs */ |
246 | ap->ops->error_handler(ap); | 247 | if (!(ap->flags & ATA_FLAG_UNLOADING)) |
248 | ap->ops->error_handler(ap); | ||
249 | else | ||
250 | ata_eh_finish(ap); | ||
247 | 251 | ||
248 | /* Exception might have happend after ->error_handler | 252 | /* Exception might have happend after ->error_handler |
249 | * recovered the port but before this point. Repeat | 253 | * recovered the port but before this point. Repeat |