aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libata-core.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2006-03-31 06:36:47 -0500
committerJeff Garzik <jeff@garzik.org>2006-03-31 10:14:42 -0500
commite4a70e76add280db6068426716a9b2a74099144f (patch)
treeb978d7da736590fe0603e7a88a7a9b20cc2a36b1 /drivers/scsi/libata-core.c
parent79ea24e72e59b5f0951483cc4f357afe9bf7ff89 (diff)
[PATCH] libata: fix ata_qc_issue failure path
On sg_err failure path, ata_qc_issue() doesn't mark the qc active before returning. This triggers WARN_ON() in __ata_qc_complete() when the qc gets completed. This patch moves ap->active_tag and QCFLAG_ACTIVE setting to the top of the function. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/scsi/libata-core.c')
-rw-r--r--drivers/scsi/libata-core.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 21b0ed583b8a..eb4df01d9fa0 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -4006,6 +4006,9 @@ unsigned int ata_qc_issue(struct ata_queued_cmd *qc)
4006{ 4006{
4007 struct ata_port *ap = qc->ap; 4007 struct ata_port *ap = qc->ap;
4008 4008
4009 qc->ap->active_tag = qc->tag;
4010 qc->flags |= ATA_QCFLAG_ACTIVE;
4011
4009 if (ata_should_dma_map(qc)) { 4012 if (ata_should_dma_map(qc)) {
4010 if (qc->flags & ATA_QCFLAG_SG) { 4013 if (qc->flags & ATA_QCFLAG_SG) {
4011 if (ata_sg_setup(qc)) 4014 if (ata_sg_setup(qc))
@@ -4020,9 +4023,6 @@ unsigned int ata_qc_issue(struct ata_queued_cmd *qc)
4020 4023
4021 ap->ops->qc_prep(qc); 4024 ap->ops->qc_prep(qc);
4022 4025
4023 qc->ap->active_tag = qc->tag;
4024 qc->flags |= ATA_QCFLAG_ACTIVE;
4025
4026 return ap->ops->qc_issue(qc); 4026 return ap->ops->qc_issue(qc);
4027 4027
4028sg_err: 4028sg_err: