|
@@ -4807,9 +4807,6 @@ static void ata_verify_xfer(struct ata_queued_cmd *qc)
|
|
|
{
|
|
|
struct ata_device *dev = qc->dev;
|
|
|
|
|
|
- if (ata_tag_internal(qc->tag))
|
|
|
- return;
|
|
|
-
|
|
|
if (ata_is_nodata(qc->tf.protocol))
|
|
|
return;
|
|
|
|
|
@@ -4858,14 +4855,23 @@ void ata_qc_complete(struct ata_queued_cmd *qc)
|
|
|
if (unlikely(qc->err_mask))
|
|
|
qc->flags |= ATA_QCFLAG_FAILED;
|
|
|
|
|
|
- if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) {
|
|
|
- /* always fill result TF for failed qc */
|
|
|
+ /*
|
|
|
+ * Finish internal commands without any further processing
|
|
|
+ * and always with the result TF filled.
|
|
|
+ */
|
|
|
+ if (unlikely(ata_tag_internal(qc->tag))) {
|
|
|
fill_result_tf(qc);
|
|
|
+ __ata_qc_complete(qc);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- if (!ata_tag_internal(qc->tag))
|
|
|
- ata_qc_schedule_eh(qc);
|
|
|
- else
|
|
|
- __ata_qc_complete(qc);
|
|
|
+ /*
|
|
|
+ * Non-internal qc has failed. Fill the result TF and
|
|
|
+ * summon EH.
|
|
|
+ */
|
|
|
+ if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) {
|
|
|
+ fill_result_tf(qc);
|
|
|
+ ata_qc_schedule_eh(qc);
|
|
|
return;
|
|
|
}
|
|
|
|