aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libata-eh.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/libata-eh.c')
-rw-r--r--drivers/scsi/libata-eh.c8
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
48static void __ata_port_freeze(struct ata_port *ap); 48static void __ata_port_freeze(struct ata_port *ap);
49static void ata_eh_finish(struct ata_port *ap);
49 50
50static void ata_ering_record(struct ata_ering *ering, int is_io, 51static 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