Skip to content

Commit

Permalink
[PATCH] libata: sync result_tf.flags w/ command tf.flags
Browse files Browse the repository at this point in the history
libata didn't initialize result_tf.flags which indicates transfer type
(RW/FUA) and address type (CHS/LBA/LBA48).  ata_gen_fixed_sense()
assumed result_tf.flags equals command tf.flags and failed to report
the first failed block to SCSI layer because zero tf flags indicates
CHS and bad block reporting for CHS is not implemented.

Implement fill_result_tf() which sets result_tf.flags to command
tf.flags and use it to fill result_tf.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Tejun Heo authored and Jeff Garzik committed Dec 2, 2006
1 parent 61c0596 commit 39599a5
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions drivers/ata/libata-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -4536,6 +4536,14 @@ void __ata_qc_complete(struct ata_queued_cmd *qc)
qc->complete_fn(qc);
}

static void fill_result_tf(struct ata_queued_cmd *qc)
{
struct ata_port *ap = qc->ap;

ap->ops->tf_read(ap, &qc->result_tf);
qc->result_tf.flags = qc->tf.flags;
}

/**
* ata_qc_complete - Complete an active ATA command
* @qc: Command to complete
Expand Down Expand Up @@ -4573,15 +4581,15 @@ void ata_qc_complete(struct ata_queued_cmd *qc)
if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) {
if (!ata_tag_internal(qc->tag)) {
/* always fill result TF for failed qc */
ap->ops->tf_read(ap, &qc->result_tf);
fill_result_tf(qc);
ata_qc_schedule_eh(qc);
return;
}
}

/* read result TF if requested */
if (qc->flags & ATA_QCFLAG_RESULT_TF)
ap->ops->tf_read(ap, &qc->result_tf);
fill_result_tf(qc);

__ata_qc_complete(qc);
} else {
Expand All @@ -4590,7 +4598,7 @@ void ata_qc_complete(struct ata_queued_cmd *qc)

/* read result TF if failed or requested */
if (qc->err_mask || qc->flags & ATA_QCFLAG_RESULT_TF)
ap->ops->tf_read(ap, &qc->result_tf);
fill_result_tf(qc);

__ata_qc_complete(qc);
}
Expand Down

0 comments on commit 39599a5

Please sign in to comment.