Re: [PATCH] scsi: ufs: Correct the lun used in eh_device_reset_handler() callback

2021-01-07 Thread Martin K. Petersen
On Mon, 28 Dec 2020 04:04:36 -0800, Can Guo wrote:

> Users can initiate resets to specific SCSI device/target/host through
> IOCTL. When this happens, the SCSI cmd passed to eh_device/target/host
> _reset_handler() callbacks is initialized with a request whose tag is -1.
> So, in this case, it is not right for eh_device_reset_handler() callback
> to count on the lun get from hba->lrb[-1]. Fix it by getting lun from the
> SCSI device associated with the SCSI cmd.

Applied to 5.11/scsi-fixes, thanks!

[1/1] scsi: ufs: Correct the lun used in eh_device_reset_handler() callback
  https://git.kernel.org/mkp/scsi/c/35fc4cd34426

-- 
Martin K. Petersen  Oracle Linux Engineering


Re: [PATCH] scsi: ufs: Correct the lun used in eh_device_reset_handler() callback

2020-12-30 Thread Stanley Chu
On Mon, 2020-12-28 at 04:04 -0800, Can Guo wrote:
> Users can initiate resets to specific SCSI device/target/host through
> IOCTL. When this happens, the SCSI cmd passed to eh_device/target/host
> _reset_handler() callbacks is initialized with a request whose tag is -1.
> So, in this case, it is not right for eh_device_reset_handler() callback
> to count on the lun get from hba->lrb[-1]. Fix it by getting lun from the
> SCSI device associated with the SCSI cmd.
> 
> Signed-off-by: Can Guo 

Reviewed-by: Stanley Chu 


Re: [PATCH] scsi: ufs: Correct the lun used in eh_device_reset_handler() callback

2020-12-29 Thread Can Guo

On 2020-12-30 15:20, Avri Altman wrote:

Users can initiate resets to specific SCSI device/target/host through
IOCTL. When this happens, the SCSI cmd passed to eh_device/target/host
_reset_handler() callbacks is initialized with a request whose tag is 
-1.
So, in this case, it is not right for eh_device_reset_handler() 
callback
to count on the lun get from hba->lrb[-1]. Fix it by getting lun from 
the

SCSI device associated with the SCSI cmd.

Signed-off-by: Can Guo 

Reviewed-by: Avri Altman 

Btw, am surprised to see that you guys are still using sg_reset
instead of ufs-utils?


Hi Avri,

We are not using any user layer tools at all. But I am confronted
with many customers and tons of test teams inside and outside.
I see all kinds of corner cases everyday, so not surprised at all.

Thanks,
Can Guo



Thanks,
Avri


RE: [PATCH] scsi: ufs: Correct the lun used in eh_device_reset_handler() callback

2020-12-29 Thread Avri Altman
 
> Users can initiate resets to specific SCSI device/target/host through
> IOCTL. When this happens, the SCSI cmd passed to eh_device/target/host
> _reset_handler() callbacks is initialized with a request whose tag is -1.
> So, in this case, it is not right for eh_device_reset_handler() callback
> to count on the lun get from hba->lrb[-1]. Fix it by getting lun from the
> SCSI device associated with the SCSI cmd.
> 
> Signed-off-by: Can Guo 
Reviewed-by: Avri Altman 

Btw, am surprised to see that you guys are still using sg_reset instead of 
ufs-utils?

Thanks,
Avri


[PATCH] scsi: ufs: Correct the lun used in eh_device_reset_handler() callback

2020-12-28 Thread Can Guo
Users can initiate resets to specific SCSI device/target/host through
IOCTL. When this happens, the SCSI cmd passed to eh_device/target/host
_reset_handler() callbacks is initialized with a request whose tag is -1.
So, in this case, it is not right for eh_device_reset_handler() callback
to count on the lun get from hba->lrb[-1]. Fix it by getting lun from the
SCSI device associated with the SCSI cmd.

Signed-off-by: Can Guo 

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 98093a5..d577cda 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -6604,19 +6604,16 @@ static int ufshcd_eh_device_reset_handler(struct 
scsi_cmnd *cmd)
 {
struct Scsi_Host *host;
struct ufs_hba *hba;
-   unsigned int tag;
u32 pos;
int err;
-   u8 resp = 0xF;
-   struct ufshcd_lrb *lrbp;
+   u8 resp = 0xF, lun;
unsigned long flags;
 
host = cmd->device->host;
hba = shost_priv(host);
-   tag = cmd->request->tag;
 
-   lrbp = >lrb[tag];
-   err = ufshcd_issue_tm_cmd(hba, lrbp->lun, 0, UFS_LOGICAL_RESET, );
+   lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun);
+   err = ufshcd_issue_tm_cmd(hba, lun, 0, UFS_LOGICAL_RESET, );
if (err || resp != UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
if (!err)
err = resp;
@@ -6625,7 +6622,7 @@ static int ufshcd_eh_device_reset_handler(struct 
scsi_cmnd *cmd)
 
/* clear the commands that were pending for corresponding LUN */
for_each_set_bit(pos, >outstanding_reqs, hba->nutrs) {
-   if (hba->lrb[pos].lun == lrbp->lun) {
+   if (hba->lrb[pos].lun == lun) {
err = ufshcd_clear_cmd(hba, pos);
if (err)
break;
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux 
Foundation Collaborative Project.