mbox series

[PATCHv2,00/51] SCSI EH argument reshuffle part II

Message ID 20210817091456.73342-1-hare@suse.de (mailing list archive)
Headers show
Series SCSI EH argument reshuffle part II | expand

Message

Hannes Reinecke Aug. 17, 2021, 9:14 a.m. UTC
Hi all,

finally here's the patchset to revamp the SCSI EH callback arguments
which I promised to do (some years ago ...).
(And, hint: do not order the series by date; some patches are _old_)

The overall idea is to match the scope of the eh_XXX callbacks with
the appropriate argument, eg eh_device_reset_handler() should have a
scsi device as argument etc.
Relying on the scsi command has the problem that
a) we're holding a reference on that command for the entire lifetime
of the error handling and
b) it leads to some 'interesting' driver implementations; some
higher-level EH callback implementations go through the list of
outstanding commands and try to abort this particular command only;
makes one wonder what'll happen to the other commands ...

However, this patchset has the nice side-effect that we don't need to
allocate an out-of-order scsi command in scsi_ioctl_reset(), but can
call the function directly.

This is the second part which rearranges the individual EH handler
implementation to not rely on the passed in scsi command and do
the final conversion to the new calling convention.

The entire patchset can be found at

https://git.kernel.org/hare/scsi-devel/h/eh-rework.v2

As usual, comments and reviews are welcome.

Changes to the original submission:
- Updated to 5.15/scsi-queue
- Add patches for mpi3mr driver

Hannes Reinecke (51):
  lpfc: kill lpfc_bus_reset_handler
  lpfc: drop lpfc_no_handler()
  sym53c8xx_2: split off bus reset from host reset
  ips: Do not try to abort command from host reset
  snic: reserve tag for TMF
  qla1280: separate out host reset function from qla1280_error_action()
  megaraid: pass in NULL scb for host reset
  zfcp: open-code fc_block_scsi_eh() for host reset
  mpi3mr: split off bus_reset function from host_reset
  scsi: Use Scsi_Host as argument for eh_host_reset_handler
  mptfc: simplify mpt_fc_block_error_handler()
  mptfusion: correct definitions for mptscsih_dev_reset()
  mptfc: open-code mptfc_block_error_handler() for bus reset
  pmcraid: Select device in pmcraid_eh_bus_reset_handler()
  qla2xxx: open-code qla2xxx_generic_reset()
  qla2xxx: Do not call fc_block_scsi_eh() during bus reset
  visorhba: select first device on the bus for bus_reset()
  ncr53c8xx: remove 'sync_reset' argument from ncr_reset_bus()
  ncr53c8xx: Complete all commands during bus reset
  ncr53c8xx: Remove unused code
  scsi: Use Scsi_Host and channel number as argument for
    eh_bus_reset_handler()
  libiscsi: use cls_session as argument for target and session reset
  bnx2fc: Do not rely on a scsi command when issueing lun or target
    reset
  ibmvfc: open-code reset loop for target reset
  lpfc: use fc_block_rport()
  lpfc: use rport as argument for lpfc_send_taskmgmt()
  lpfc: use rport as argument for lpfc_chk_tgt_mapped()
  csiostor: use fc_block_rport()
  qla2xxx: use fc_block_rport()
  fc_fcp: use fc_block_rport()
  qedf: use fc rport as argument for qedf_initiate_tmf()
  sym53c8xx_2: rework reset handling
  bfa: Do not use scsi command to signal TMF status
  scsi_transport_iscsi: use session as argument for
    iscsi_block_scsi_eh()
  pmcraid: select first available device for target reset
  scsi: Use scsi_target as argument for eh_target_reset_handler()
  aha152x: look for stuck command when resetting device
  fnic: use dedicated device reset command
  a1000u2w: do not rely on the command for inia100_device_reset()
  aic7xxx: use scsi device as argument for BUILD_SCSIID()
  aic79xx: use scsi device as argument for BUILD_SCSIID()
  aic7xxx: do not reference scsi command when resetting device
  aic79xx: do not reference scsi command when resetting device
  xen-scsifront: add scsi device as argument to scsifront_do_request()
  fas216: Rework device reset to not rely on SCSI command pointer
  csiostor: use separate TMF command
  snic: use dedicated device reset command
  snic: Use scsi_host_busy_iter() to traverse commands
  scsi: Move eh_device_reset_handler() to use scsi_device as argument
  scsi: Do not allocate scsi command in scsi_ioctl_reset()
  scsi_error: streamline scsi_eh_bus_device_reset()

 Documentation/scsi/scsi_eh.rst                |  16 +-
 Documentation/scsi/scsi_mid_low_api.rst       |  31 +-
 drivers/infiniband/ulp/srp/ib_srp.c           |  12 +-
 drivers/message/fusion/mptfc.c                |  99 ++++--
 drivers/message/fusion/mptsas.c               |  10 +-
 drivers/message/fusion/mptscsih.c             | 115 ++++--
 drivers/message/fusion/mptscsih.h             |   7 +-
 drivers/message/fusion/mptspi.c               |   8 +-
 drivers/s390/scsi/zfcp_scsi.c                 |  41 ++-
 drivers/scsi/3w-9xxx.c                        |  11 +-
 drivers/scsi/3w-sas.c                         |  11 +-
 drivers/scsi/3w-xxxx.c                        |  11 +-
 drivers/scsi/53c700.c                         |  39 +-
 drivers/scsi/BusLogic.c                       |  14 +-
 drivers/scsi/NCR5380.c                        |   3 +-
 drivers/scsi/a100u2w.c                        |  52 +--
 drivers/scsi/aacraid/linit.c                  |  35 +-
 drivers/scsi/advansys.c                       |  26 +-
 drivers/scsi/aha152x.c                        |  34 +-
 drivers/scsi/aha1542.c                        |  30 +-
 drivers/scsi/aic7xxx/aic79xx_osm.c            |  64 ++--
 drivers/scsi/aic7xxx/aic7xxx_osm.c            | 120 ++++---
 drivers/scsi/arcmsr/arcmsr_hba.c              |   6 +-
 drivers/scsi/arm/acornscsi.c                  |   8 +-
 drivers/scsi/arm/fas216.c                     |  55 ++-
 drivers/scsi/arm/fas216.h                     |  17 +-
 drivers/scsi/atari_scsi.c                     |   4 +-
 drivers/scsi/be2iscsi/be_main.c               |  18 +-
 drivers/scsi/bfa/bfad_im.c                    | 113 +++---
 drivers/scsi/bfa/bfad_im.h                    |   2 +
 drivers/scsi/bnx2fc/bnx2fc.h                  |   5 +-
 drivers/scsi/bnx2fc/bnx2fc_hwi.c              |  14 +-
 drivers/scsi/bnx2fc/bnx2fc_io.c               |  95 +++--
 drivers/scsi/csiostor/csio_hw.h               |   2 +
 drivers/scsi/csiostor/csio_init.c             |   2 +-
 drivers/scsi/csiostor/csio_scsi.c             |  52 ++-
 drivers/scsi/cxlflash/main.c                  |  10 +-
 drivers/scsi/dc395x.c                         |  25 +-
 drivers/scsi/dpt_i2o.c                        |  43 +--
 drivers/scsi/dpti.h                           |   6 +-
 drivers/scsi/esas2r/esas2r.h                  |   8 +-
 drivers/scsi/esas2r/esas2r_main.c             |  55 +--
 drivers/scsi/esp_scsi.c                       |   8 +-
 drivers/scsi/fdomain.c                        |   3 +-
 drivers/scsi/fnic/fnic.h                      |   4 +-
 drivers/scsi/fnic/fnic_scsi.c                 | 149 +++-----
 drivers/scsi/hpsa.c                           |  14 +-
 drivers/scsi/hptiop.c                         |   6 +-
 drivers/scsi/ibmvscsi/ibmvfc.c                |  55 +--
 drivers/scsi/ibmvscsi/ibmvscsi.c              |  23 +-
 drivers/scsi/imm.c                            |   6 +-
 drivers/scsi/initio.c                         |  11 +-
 drivers/scsi/ipr.c                            |  35 +-
 drivers/scsi/ips.c                            |  40 +--
 drivers/scsi/libfc/fc_fcp.c                   |  18 +-
 drivers/scsi/libiscsi.c                       |  38 +-
 drivers/scsi/libsas/sas_scsi_host.c           |  21 +-
 drivers/scsi/lpfc/lpfc_scsi.c                 | 160 ++-------
 drivers/scsi/mac53c94.c                       |   8 +-
 drivers/scsi/megaraid.c                       |  46 +--
 drivers/scsi/megaraid.h                       |   2 +-
 drivers/scsi/megaraid/megaraid_mbox.c         |  14 +-
 drivers/scsi/megaraid/megaraid_sas.h          |   3 +-
 drivers/scsi/megaraid/megaraid_sas_base.c     |  44 +--
 drivers/scsi/megaraid/megaraid_sas_fusion.c   |  56 +--
 drivers/scsi/mesh.c                           |  10 +-
 drivers/scsi/mpi3mr/mpi3mr_os.c               | 144 ++++----
 drivers/scsi/mpt3sas/mpt3sas_scsih.c          |  80 ++---
 drivers/scsi/mvumi.c                          |   7 +-
 drivers/scsi/myrb.c                           |   3 +-
 drivers/scsi/myrs.c                           |   3 +-
 drivers/scsi/ncr53c8xx.c                      | 203 +----------
 drivers/scsi/nsp32.c                          |  12 +-
 drivers/scsi/pcmcia/nsp_cs.c                  |  10 +-
 drivers/scsi/pcmcia/nsp_cs.h                  |   6 +-
 drivers/scsi/pcmcia/qlogic_stub.c             |   4 +-
 drivers/scsi/pcmcia/sym53c500_cs.c            |   8 +-
 drivers/scsi/pmcraid.c                        |  73 +++-
 drivers/scsi/ppa.c                            |   6 +-
 drivers/scsi/qedf/qedf.h                      |   5 +-
 drivers/scsi/qedf/qedf_io.c                   |  80 ++---
 drivers/scsi/qedf/qedf_main.c                 |  24 +-
 drivers/scsi/qedi/qedi_iscsi.c                |   3 +-
 drivers/scsi/qla1280.c                        |  74 ++--
 drivers/scsi/qla2xxx/qla_os.c                 | 155 ++++----
 drivers/scsi/qla4xxx/ql4_os.c                 |  85 +++--
 drivers/scsi/qlogicfas408.c                   |  10 +-
 drivers/scsi/qlogicfas408.h                   |   2 +-
 drivers/scsi/qlogicpti.c                      |   3 +-
 drivers/scsi/scsi_debug.c                     |  78 ++--
 drivers/scsi/scsi_error.c                     | 160 +++++----
 drivers/scsi/scsi_transport_iscsi.c           |   6 +-
 drivers/scsi/smartpqi/smartpqi_init.c         |  11 +-
 drivers/scsi/snic/snic.h                      |   6 +-
 drivers/scsi/snic/snic_main.c                 |   3 +
 drivers/scsi/snic/snic_scsi.c                 | 333 ++++++++----------
 drivers/scsi/stex.c                           |   7 +-
 drivers/scsi/storvsc_drv.c                    |   4 +-
 drivers/scsi/sym53c8xx_2/sym_glue.c           | 190 ++++++----
 drivers/scsi/ufs/ufshcd.c                     |  14 +-
 drivers/scsi/virtio_scsi.c                    |  12 +-
 drivers/scsi/vmw_pvscsi.c                     |  20 +-
 drivers/scsi/wd33c93.c                        |   5 +-
 drivers/scsi/wd33c93.h                        |   2 +-
 drivers/scsi/wd719x.c                         |  17 +-
 drivers/scsi/xen-scsifront.c                  |  53 +--
 drivers/staging/rts5208/rtsx.c                |   4 +-
 .../staging/unisys/visorhba/visorhba_main.c   |  40 +--
 drivers/target/loopback/tcm_loop.c            |  17 +-
 drivers/usb/image/microtek.c                  |   4 +-
 drivers/usb/storage/scsiglue.c                |   8 +-
 drivers/usb/storage/uas.c                     |   3 +-
 include/scsi/libfc.h                          |   4 +-
 include/scsi/libiscsi.h                       |   6 +-
 include/scsi/libsas.h                         |   4 +-
 include/scsi/scsi_host.h                      |   8 +-
 include/scsi/scsi_transport_iscsi.h           |   2 +-
 117 files changed, 1960 insertions(+), 2164 deletions(-)

Comments

Christoph Hellwig Aug. 17, 2021, 12:13 p.m. UTC | #1
First, thanks for resurrecting the series.

Second, this giant patchbomb is almost impossible to review.  It might
make sense to resend what is the prep patches without the prototype
changes after the first round of review - maybe we can squeeze those
into 5.15 still and do the heavy lifting with another series per
actually changes method or so.
Hannes Reinecke Aug. 17, 2021, 12:55 p.m. UTC | #2
On 8/17/21 2:13 PM, Christoph Hellwig wrote:
> First, thanks for resurrecting the series.
> 
> Second, this giant patchbomb is almost impossible to review.  It might
> make sense to resend what is the prep patches without the prototype
> changes after the first round of review - maybe we can squeeze those
> into 5.15 still and do the heavy lifting with another series per
> actually changes method or so.
> 
Sure, can do.

Cheers,

Hannes
Christoph Hellwig Feb. 23, 2022, 12:49 p.m. UTC | #3
On Tue, Aug 17, 2021 at 02:55:25PM +0200, Hannes Reinecke wrote:
> On 8/17/21 2:13 PM, Christoph Hellwig wrote:
> > First, thanks for resurrecting the series.
> > 
> > Second, this giant patchbomb is almost impossible to review.  It might
> > make sense to resend what is the prep patches without the prototype
> > changes after the first round of review - maybe we can squeeze those
> > into 5.15 still and do the heavy lifting with another series per
> > actually changes method or so.
> > 
> Sure, can do.

Do you have another chunk of these patches ready?  It would be so nice
to see the EH code finally cleaned up..
Hannes Reinecke Feb. 23, 2022, 1:03 p.m. UTC | #4
On 2/23/22 13:49, Christoph Hellwig wrote:
> On Tue, Aug 17, 2021 at 02:55:25PM +0200, Hannes Reinecke wrote:
>> On 8/17/21 2:13 PM, Christoph Hellwig wrote:
>>> First, thanks for resurrecting the series.
>>>
>>> Second, this giant patchbomb is almost impossible to review.  It might
>>> make sense to resend what is the prep patches without the prototype
>>> changes after the first round of review - maybe we can squeeze those
>>> into 5.15 still and do the heavy lifting with another series per
>>> actually changes method or so.
>>>
>> Sure, can do.
> 
> Do you have another chunk of these patches ready?  It would be so nice
> to see the EH code finally cleaned up..

Sure. Against which tree?
The SCSI pointer and scsi_request removal will have an impact onto these 
patches I guess, so I'd rather code against those patches folded in.

Cheers,

Hannes
Christoph Hellwig Feb. 23, 2022, 1:05 p.m. UTC | #5
On Wed, Feb 23, 2022 at 02:03:01PM +0100, Hannes Reinecke wrote:
> Sure. Against which tree?
> The SCSI pointer and scsi_request removal will have an impact onto these 
> patches I guess, so I'd rather code against those patches folded in.

The SCSI pointer removal already is in Martin's staging tree, so that
is a good baseline.  I don't think the the scsi_request removal should
have much overlap with the various driver patches and just a trivial
overlap with the scsi_ioctl_reset changes.

So maybe just prepare a first batch that is needed for the eh_host_reset
prototype changes against Martin's staging tree?