Hi Avri, Bean, On Tue, 2020-08-11 at 16:18 +0200, Bean Huo wrote: > From: Stanley Chu <stanley.chu@xxxxxxxxxxxx> > > If somehow no interrupt notification is raised for a completed request > and its doorbell bit is cleared by host, UFS driver needs to cleanup > its outstanding bit in ufshcd_abort(). Otherwise, system may behave > abnormally by below flow: > > After ufshcd_abort() returns, this request will be requeued by SCSI > layer with its outstanding bit set. Any future completed request > will trigger ufshcd_transfer_req_compl() to handle all "completed > outstanding bits". In this time, the "abnormal outstanding bit" > will be detected and the "requeued request" will be chosen to execute > request post-processing flow. This is wrong because this request is > still "alive". > > Signed-off-by: Stanley Chu <stanley.chu@xxxxxxxxxxxx> > Reviewed-by: Can Guo <cang@xxxxxxxxxxxxxx> > Signed-off-by: Bean Huo <beanhuo@xxxxxxxxxx> Thanks Bean's patch integration. Like Avri's comment in https://patchwork.kernel.org/patch/11683381/ I think you could add Acked-by tag from Avri. Hi Avri, Please correct above description if required. Thanks for your review! : ) Thanks, Stanley Chu > --- > drivers/scsi/ufs/ufshcd.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index 307622284239..66fe814c8725 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -6492,7 +6492,7 @@ static int ufshcd_abort(struct scsi_cmnd *cmd) > /* command completed already */ > dev_err(hba->dev, "%s: cmd at tag %d successfully cleared from DB.\n", > __func__, tag); > - goto out; > + goto cleanup; > } else { > dev_err(hba->dev, > "%s: no response from device. tag = %d, err %d\n", > @@ -6526,6 +6526,7 @@ static int ufshcd_abort(struct scsi_cmnd *cmd) > goto out; > } > > +cleanup: > scsi_dma_unmap(cmd); > > spin_lock_irqsave(host->host_lock, flags);