diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 5e62600d74a5..c25c0a598a30 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -6484,6 +6484,8 @@ static bool ufshcd_abort_all(struct ufs_hba *hba) if (is_mcq_enabled(hba)) { struct ufshcd_lrb *lrbp; int tag; + struct ufs_hw_queue *hwq; + unsigned long flags; for (tag = 0; tag < hba->nutrs; tag++) { lrbp = &hba->lrb[tag]; @@ -6497,6 +6499,11 @@ static bool ufshcd_abort_all(struct ufs_hba *hba) needs_reset = true; goto out; } + hwq = ufshcd_mcq_req_to_hwq(hba, scsi_cmd_to_rq(lrbp->cmd)); + spin_lock_irqsave(&hwq->cq_lock, flags); + if (ufshcd_cmd_inflight(lrbp->cmd)) + ufshcd_release_scsi_cmd(hba, lrbp); + spin_unlock_irqrestore(&hwq->cq_lock, flags); } } else { /* Clear pending transfer requests */