2021-06-23 07:39:27

by Can Guo

[permalink] [raw]
Subject: [PATCH v4 05/10] scsi: ufs: Remove a redundant tag check in ufshcd_queuecommand()

Since commit a45f937110fa6b0c2c06a5d3ef026963a5759050 ("scsi: ufs: Optimize
host lock on transfer requests send/compl paths") has moved ufshcd state
check to front, we can remove the following tag check added for preventing
the scenario where a cmd is trying to take a lrbp, which is still in use.
This scenario can only happen if a cmd goes through the fast abort path
(whose tag is released but lrbp is not) in ufshcd_abort(), and since ufshcd
state is also changed by the fast abort path, checking the ufshcd state in
ufshcd_queuecommand() is equivalent, hence remove the tag check.

Signed-off-by: Can Guo <[email protected]>
---
drivers/scsi/ufs/ufshcd.c | 9 ---------
1 file changed, 9 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 5f837c4..3695dd2 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -2768,15 +2768,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
WARN_ON(ufshcd_is_clkgating_allowed(hba) &&
(hba->clk_gating.state != CLKS_ON));

- if (unlikely(test_bit(tag, &hba->outstanding_reqs))) {
- if (hba->wlu_pm_op_in_progress)
- set_host_byte(cmd, DID_BAD_TARGET);
- else
- err = SCSI_MLQUEUE_HOST_BUSY;
- ufshcd_release(hba);
- goto out;
- }
-
lrbp = &hba->lrb[tag];
WARN_ON(lrbp->cmd);
lrbp->cmd = cmd;
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


2021-06-23 21:25:27

by Bart Van Assche

[permalink] [raw]
Subject: Re: [PATCH v4 05/10] scsi: ufs: Remove a redundant tag check in ufshcd_queuecommand()

On 6/23/21 12:35 AM, Can Guo wrote:
> Since commit a45f937110fa6b0c2c06a5d3ef026963a5759050 ("scsi: ufs: Optimize

Please shorten commit IDs to 12 characters.

> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index 5f837c4..3695dd2 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -2768,15 +2768,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
> WARN_ON(ufshcd_is_clkgating_allowed(hba) &&
> (hba->clk_gating.state != CLKS_ON));
>
> - if (unlikely(test_bit(tag, &hba->outstanding_reqs))) {
> - if (hba->wlu_pm_op_in_progress)
> - set_host_byte(cmd, DID_BAD_TARGET);
> - else
> - err = SCSI_MLQUEUE_HOST_BUSY;
> - ufshcd_release(hba);
> - goto out;
> - }

I have never encountered code like the above in any other SCSI LLD. Anyway:

Reviewed-by: Bart Van Assche <[email protected]>