diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/libata-core.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 3544f5d020c6..9a6aacf467b8 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
@@ -3213,9 +3213,14 @@ void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat) | |||
3213 | if (likely(qc->flags & ATA_QCFLAG_DMAMAP)) | 3213 | if (likely(qc->flags & ATA_QCFLAG_DMAMAP)) |
3214 | ata_sg_clean(qc); | 3214 | ata_sg_clean(qc); |
3215 | 3215 | ||
3216 | /* atapi: mark qc as inactive to prevent the interrupt handler | ||
3217 | * from completing the command twice later, before the error handler | ||
3218 | * is called. (when rc != 0 and atapi request sense is needed) | ||
3219 | */ | ||
3220 | qc->flags &= ~ATA_QCFLAG_ACTIVE; | ||
3221 | |||
3216 | /* call completion callback */ | 3222 | /* call completion callback */ |
3217 | rc = qc->complete_fn(qc, drv_stat); | 3223 | rc = qc->complete_fn(qc, drv_stat); |
3218 | qc->flags &= ~ATA_QCFLAG_ACTIVE; | ||
3219 | 3224 | ||
3220 | /* if callback indicates not to complete command (non-zero), | 3225 | /* if callback indicates not to complete command (non-zero), |
3221 | * return immediately | 3226 | * return immediately |