On 2023/10/16 20:15, Hannes Reinecke wrote:
The device reset function should only depend on the scsi device,
not the scsi command.
Signed-off-by: Hannes Reinecke <hare@xxxxxxx>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx>
---
Documentation/scsi/scsi_eh.rst | 2 +-
Documentation/scsi/scsi_mid_low_api.rst | 4 +-
drivers/infiniband/ulp/srp/ib_srp.c | 6 +--
drivers/message/fusion/mptfc.c | 12 +++---
drivers/message/fusion/mptscsih.c | 27 ++++---------
drivers/message/fusion/mptscsih.h | 2 +-
drivers/s390/scsi/zfcp_scsi.c | 4 +-
drivers/scsi/a100u2w.c | 7 ++--
drivers/scsi/aacraid/linit.c | 9 ++---
drivers/scsi/aha152x.c | 6 +--
drivers/scsi/aha1542.c | 8 ++--
drivers/scsi/aic7xxx/aic79xx_osm.c | 27 +++++--------
drivers/scsi/aic7xxx/aic7xxx_osm.c | 4 +-
drivers/scsi/arm/fas216.c | 5 +--
drivers/scsi/arm/fas216.h | 6 +--
drivers/scsi/be2iscsi/be_main.c | 8 ++--
drivers/scsi/bfa/bfad_im.c | 3 +-
drivers/scsi/bnx2fc/bnx2fc.h | 2 +-
drivers/scsi/bnx2fc/bnx2fc_io.c | 6 +--
drivers/scsi/csiostor/csio_scsi.c | 5 +--
drivers/scsi/cxlflash/main.c | 5 +--
drivers/scsi/esas2r/esas2r.h | 2 +-
drivers/scsi/esas2r/esas2r_main.c | 3 +-
drivers/scsi/fnic/fnic.h | 2 +-
drivers/scsi/fnic/fnic_scsi.c | 5 +--
drivers/scsi/hpsa.c | 14 +++----
drivers/scsi/ibmvscsi/ibmvfc.c | 8 ++--
drivers/scsi/ibmvscsi/ibmvscsi.c | 19 ++++-----
drivers/scsi/ipr.c | 24 +++++------
drivers/scsi/libfc/fc_fcp.c | 13 +++---
drivers/scsi/libiscsi.c | 15 ++++---
drivers/scsi/libsas/sas_scsi_host.c | 12 +++---
drivers/scsi/lpfc/lpfc_scsi.c | 12 +++---
drivers/scsi/mpi3mr/mpi3mr_os.c | 40 ++++++++-----------
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 30 ++++++--------
drivers/scsi/pcmcia/nsp_cs.h | 2 -
drivers/scsi/pmcraid.c | 8 ++--
drivers/scsi/qedf/qedf_main.c | 6 +--
drivers/scsi/qla1280.c | 53 ++++++++-----------------
drivers/scsi/qla2xxx/qla_os.c | 24 +++++------
drivers/scsi/qla4xxx/ql4_os.c | 23 +++++------
drivers/scsi/scsi_debug.c | 3 +-
drivers/scsi/scsi_error.c | 2 +-
drivers/scsi/smartpqi/smartpqi.h | 1 -
drivers/scsi/smartpqi/smartpqi_init.c | 19 ++++-----
drivers/scsi/snic/snic.h | 2 +-
drivers/scsi/snic/snic_scsi.c | 4 +-
drivers/scsi/virtio_scsi.c | 12 +++---
drivers/scsi/vmw_pvscsi.c | 10 ++---
drivers/scsi/wd719x.c | 6 +--
drivers/scsi/xen-scsifront.c | 6 +--
drivers/staging/rts5208/rtsx.c | 6 ++-
drivers/target/loopback/tcm_loop.c | 8 ++--
drivers/ufs/core/ufshcd.c | 8 ++--
drivers/usb/storage/scsiglue.c | 4 +-
drivers/usb/storage/uas.c | 3 +-
include/scsi/libfc.h | 2 +-
include/scsi/libiscsi.h | 2 +-
include/scsi/libsas.h | 2 +-
include/scsi/scsi_host.h | 2 +-
60 files changed, 253 insertions(+), 322 deletions(-)
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index c247a3c7ae17..a2c3ffa2b5bd 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -5306,9 +5306,8 @@ static void scsi_debug_stop_all_queued(struct scsi_device *sdp)
scsi_debug_stop_all_queued_iter, sdp);
}
-static int scsi_debug_device_reset(struct scsi_cmnd *SCpnt)
+static int scsi_debug_device_reset(struct scsi_device *sdp)
{
- struct scsi_device *sdp = SCpnt->device;
struct sdebug_dev_info *devip = sdp->hostdata;
++num_dev_resets;
The change of my scsi_debug error injection conflict with it, you can
fix the conflict with following:
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index a7c374b399a1..60070d12c949 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -5590,12 +5590,10 @@ static void scsi_debug_stop_all_queued(struct scsi_device *sdp)
scsi_debug_stop_all_queued_iter, sdp);
}
-static int sdebug_fail_lun_reset(struct scsi_cmnd *cmnd)
+static int sdebug_fail_lun_reset(struct scsi_device *sdp)
{
- struct scsi_device *sdp = cmnd->device;
struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
struct sdebug_err_inject *err;
- unsigned char *cmd = cmnd->cmnd;
int ret = 0;
if (devip == NULL)
@@ -5603,8 +5601,7 @@ static int sdebug_fail_lun_reset(struct scsi_cmnd *cmnd)
rcu_read_lock();
list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
- if (err->type == ERR_LUN_RESET_FAILED &&
- (err->cmd == cmd[0] || err->cmd == 0xff)) {
+ if (err->type == ERR_LUN_RESET_FAILED) {
ret = !!err->cnt;
if (err->cnt < 0)
err->cnt++;
@@ -5618,12 +5615,9 @@ static int sdebug_fail_lun_reset(struct scsi_cmnd *cmnd)
return 0;
}
-static int scsi_debug_device_reset(struct scsi_cmnd *SCpnt)
+static int scsi_debug_device_reset(struct scsi_device *sdp)
{
- struct scsi_device *sdp = SCpnt->device;
struct sdebug_dev_info *devip = sdp->hostdata;
- u8 *cmd = SCpnt->cmnd;
- u8 opcode = cmd[0];
++num_dev_resets;
@@ -5634,8 +5628,8 @@ static int scsi_debug_device_reset(struct scsi_cmnd *SCpnt)
if (devip)
set_bit(SDEBUG_UA_POR, devip->uas_bm);
- if (sdebug_fail_lun_reset(SCpnt)) {
- scmd_printk(KERN_INFO, SCpnt, "fail lun reset 0x%x\n", opcode);
+ if (sdebug_fail_lun_reset(sdp)) {
+ sdev_printk(KERN_INFO, sdp, "fail lun reset\n");
return FAILED;
}