From: Stanley Jhu <stanleyjhu@google.com>
To: "Martin K . Petersen" <mkp@kernel.org>, linux-scsi@vger.kernel.org
Cc: "James E . J . Bottomley" <James.Bottomley@HansenPartnership.com>,
Bart Van Assche <bvanassche@acm.org>,
Alim Akhtar <alim.akhtar@samsung.com>,
Bean Huo <beanhuo@micron.com>,
Peter Wang <peter.wang@mediatek.com>,
Can Guo <can.guo@oss.qualcomm.com>,
linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: [PATCH v3 6/7] scsi: ufs: core: Fix double release in ufshcd_abort()
Date: Tue, 20 Oct 2026 16:21:09 +0800 [thread overview]
Message-ID: <20261020082110.3511797-7-stanleyjhu@google.com> (raw)
In-Reply-To: <20261020082110.3511797-1-stanleyjhu@google.com>
In SDB mode, a timed-out command whose completion interrupt has not
been handled yet can be released twice:
1. The command times out and scsi_timeout() schedules ufshcd_abort().
2. The command finishes in hardware. Its doorbell bit is clear, but the
completion interrupt has not been handled, so BIT(tag) is still set
in hba->outstanding_reqs.
3. ufshcd_abort() sees the doorbell bit clear and calls
__ufshcd_transfer_req_compl(). That releases the command but leaves
BIT(tag) set in hba->outstanding_reqs. ufshcd_abort() returns
FAILED.
4. The next ufshcd_poll() call, or the logical unit reset that follows
the FAILED, sees BIT(tag) set in hba->outstanding_reqs and releases
the same command again.
Claim BIT(tag) in hba->outstanding_reqs with
ufshcd_clear_outstanding_reqs() and release the command only if
ufshcd_abort() claimed it and it is a SCSI command.
Fixes: 169f5eb28869 ("scsi: ufs: Optimize SCSI command processing")
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/2e042211ca0ebc974ad5ec4c0de9f3f93b3c75c0.camel@iokpp.de
Suggested-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Stanley Jhu <stanleyjhu@google.com>
---
drivers/ufs/core/ufshcd.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 111f5805f178..ee898f4a5bb1 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -8176,7 +8176,9 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
dev_err(hba->dev,
"%s: cmd was completed, but without a notifying intr, tag = %d",
__func__, tag);
- __ufshcd_transfer_req_compl(hba, 1UL << tag);
+ if (ufshcd_clear_outstanding_reqs(hba, BIT(tag)) &&
+ ufshcd_is_scsi_cmd(cmd))
+ ufshcd_release_scsi_cmd(hba, cmd);
goto release;
}
--
2.56.0.212.g129ede20d9-goog
next prev parent reply other threads:[~2026-10-20 8:21 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-20 8:21 [PATCH v3 0/7] scsi: ufs: core: Factor hba->outstanding_reqs helper and fix double completions Stanley Jhu
2026-10-20 8:21 ` [PATCH v3 1/7] scsi: ufs: core: Remove an always-false WARN_ONCE() Stanley Jhu
2026-10-20 16:53 ` Bart Van Assche
2026-10-20 8:21 ` [PATCH v3 2/7] scsi: ufs: core: Add a helper for clearing hba->outstanding_reqs Stanley Jhu
2026-10-20 16:58 ` Bart Van Assche
2026-10-20 8:21 ` [PATCH v3 3/7] scsi: ufs: core: Fix double completion in ufshcd_clear_lu_cmds() Stanley Jhu
2026-10-20 19:57 ` Bart Van Assche
2026-10-20 8:21 ` [PATCH v3 4/7] scsi: ufs: core: Use ufshcd_clear_outstanding_reqs() in ufshcd_eh_timed_out() Stanley Jhu
2026-10-20 8:21 ` [PATCH v3 5/7] scsi: ufs: core: Fix double release " Stanley Jhu
2026-10-20 17:11 ` Bart Van Assche
2026-10-20 8:21 ` Stanley Jhu [this message]
2026-10-20 20:13 ` [PATCH v3 6/7] scsi: ufs: core: Fix double release in ufshcd_abort() Bart Van Assche
2026-10-21 3:54 ` Stanley Jhu
2026-10-20 8:21 ` [PATCH v3 7/7] scsi: ufs: core: Do not release a reserved request " Stanley Jhu
2026-10-20 20:16 ` Bart Van Assche
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261020082110.3511797-7-stanleyjhu@google.com \
--to=stanleyjhu@google.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=alim.akhtar@samsung.com \
--cc=beanhuo@micron.com \
--cc=bvanassche@acm.org \
--cc=can.guo@oss.qualcomm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=mkp@kernel.org \
--cc=peter.wang@mediatek.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.