[PATCH v1 1/2] ufs: core: complete scsi command after release

Bart Van Assche bvanassche at acm.org
Fri Aug 23 09:20:29 PDT 2024


On 8/23/24 3:07 AM, peter.wang at mediatek.com wrote:
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index 0b3d0c8e0dda..4bcd4e5b62bd 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -6482,8 +6482,12 @@ static bool ufshcd_abort_one(struct request *rq, void *priv)
>   		if (!hwq)
>   			return 0;
>   		spin_lock_irqsave(&hwq->cq_lock, flags);
> -		if (ufshcd_cmd_inflight(lrbp->cmd))
> +		if (ufshcd_cmd_inflight(lrbp->cmd)) {
> +			struct scsi_cmnd *cmd = lrbp->cmd;
> +			set_host_byte(cmd, DID_REQUEUE);
>   			ufshcd_release_scsi_cmd(hba, lrbp);
> +			scsi_done(cmd);
> +		}
>   		spin_unlock_irqrestore(&hwq->cq_lock, flags);
>   	}

Hmm ... isn't the ufshcd_complete_requests() call in ufshcd_abort_all()
expected to complete these commands? Can the above change lead to
scsi_done() being called twice, something that is not allowed?

Bart.




More information about the Linux-mediatek mailing list