diff options
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/libata-eh.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 08e11bc312c2..70022bf91493 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -1575,7 +1575,14 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc) switch (qc->dev->class) { case ATA_DEV_ZAC: - if (stat & ATA_SENSE) + /* + * Fetch the sense data explicitly if: + * -It was a non-NCQ command that failed, or + * -It was a NCQ command that failed, but the sense data + * was not included in the NCQ command error log + * (i.e. NCQ autosense is not supported by the device). + */ + if (!(qc->flags & ATA_QCFLAG_SENSE_VALID) && (stat & ATA_SENSE)) ata_eh_request_sense(qc); fallthrough; case ATA_DEV_ATA: |