forked from Minki/linux
[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>
This commit is contained in:
parent
79ea24e72e
commit
e4a70e76ad
@ -4006,6 +4006,9 @@ unsigned int ata_qc_issue(struct ata_queued_cmd *qc)
|
|||||||
{
|
{
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap = qc->ap;
|
||||||
|
|
||||||
|
qc->ap->active_tag = qc->tag;
|
||||||
|
qc->flags |= ATA_QCFLAG_ACTIVE;
|
||||||
|
|
||||||
if (ata_should_dma_map(qc)) {
|
if (ata_should_dma_map(qc)) {
|
||||||
if (qc->flags & ATA_QCFLAG_SG) {
|
if (qc->flags & ATA_QCFLAG_SG) {
|
||||||
if (ata_sg_setup(qc))
|
if (ata_sg_setup(qc))
|
||||||
@ -4020,9 +4023,6 @@ unsigned int ata_qc_issue(struct ata_queued_cmd *qc)
|
|||||||
|
|
||||||
ap->ops->qc_prep(qc);
|
ap->ops->qc_prep(qc);
|
||||||
|
|
||||||
qc->ap->active_tag = qc->tag;
|
|
||||||
qc->flags |= ATA_QCFLAG_ACTIVE;
|
|
||||||
|
|
||||||
return ap->ops->qc_issue(qc);
|
return ap->ops->qc_issue(qc);
|
||||||
|
|
||||||
sg_err:
|
sg_err:
|
||||||
|
Loading…
Reference in New Issue
Block a user