|
@@ -5028,12 +5028,14 @@ void ata_qc_complete(struct ata_queued_cmd *qc)
|
|
qc->flags |= ATA_QCFLAG_FAILED;
|
|
qc->flags |= ATA_QCFLAG_FAILED;
|
|
|
|
|
|
if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) {
|
|
if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) {
|
|
- if (!ata_tag_internal(qc->tag)) {
|
|
|
|
- /* always fill result TF for failed qc */
|
|
|
|
- fill_result_tf(qc);
|
|
|
|
|
|
+ /* always fill result TF for failed qc */
|
|
|
|
+ fill_result_tf(qc);
|
|
|
|
+
|
|
|
|
+ if (!ata_tag_internal(qc->tag))
|
|
ata_qc_schedule_eh(qc);
|
|
ata_qc_schedule_eh(qc);
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+ else
|
|
|
|
+ __ata_qc_complete(qc);
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
|
|
|
|
WARN_ON_ONCE(ap->pflags & ATA_PFLAG_FROZEN);
|
|
WARN_ON_ONCE(ap->pflags & ATA_PFLAG_FROZEN);
|