diff options
| -rw-r--r-- | drivers/scsi/libata-core.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 1063928e3824..9cd9053e78fe 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
| @@ -1009,6 +1009,22 @@ ata_exec_internal(struct ata_port *ap, struct ata_device *dev, | |||
| 1009 | 1009 | ||
| 1010 | ata_qc_free(qc); | 1010 | ata_qc_free(qc); |
| 1011 | 1011 | ||
| 1012 | /* XXX - Some LLDDs (sata_mv) disable port on command failure. | ||
| 1013 | * Until those drivers are fixed, we detect the condition | ||
| 1014 | * here, fail the command with AC_ERR_SYSTEM and reenable the | ||
| 1015 | * port. | ||
| 1016 | * | ||
| 1017 | * Note that this doesn't change any behavior as internal | ||
| 1018 | * command failure results in disabling the device in the | ||
| 1019 | * higher layer for LLDDs without new reset/EH callbacks. | ||
| 1020 | * | ||
| 1021 | * Kill the following code as soon as those drivers are fixed. | ||
| 1022 | */ | ||
| 1023 | if (ap->flags & ATA_FLAG_PORT_DISABLED) { | ||
| 1024 | err_mask |= AC_ERR_SYSTEM; | ||
| 1025 | ata_port_probe(ap); | ||
| 1026 | } | ||
| 1027 | |||
| 1012 | return err_mask; | 1028 | return err_mask; |
| 1013 | } | 1029 | } |
| 1014 | 1030 | ||
