mbox series

[v13,00/19] scsi: Allow scsi_execute users to request retries

Message ID 20240123002220.129141-1-michael.christie@oracle.com
Headers show
Series scsi: Allow scsi_execute users to request retries | expand

Message

Mike Christie Jan. 23, 2024, 12:22 a.m. UTC
The following patches were made over Linus's tree which contains
a fix for sd which was not in Martin's branches.

The patches allow scsi_execute_cmd users to have scsi-ml retry the
cmd for it instead of the caller having to parse the error and loop
itself.


 drivers/scsi/Kconfig                        |   9 +
 drivers/scsi/ch.c                           |  27 ++-
 drivers/scsi/device_handler/scsi_dh_hp_sw.c |  49 +++--
 drivers/scsi/device_handler/scsi_dh_rdac.c  |  84 +++----
 drivers/scsi/scsi_lib.c                     |  26 ++-
 drivers/scsi/scsi_lib_test.c                | 330 ++++++++++++++++++++++++++++
 drivers/scsi/scsi_scan.c                    | 107 +++++----
 drivers/scsi/scsi_transport_spi.c           |  35 +--
 drivers/scsi/sd.c                           | 326 +++++++++++++++++----------
 drivers/scsi/ses.c                          |  66 ++++--
 drivers/scsi/sr.c                           |  38 ++--
 drivers/ufs/core/ufshcd.c                   |  22 +-
 12 files changed, 822 insertions(+), 297 deletions(-)

v13:
- Rename scsi_execute_cmd's retries variable and update those comments
and the scsi_failure struct to try and make it clear how the retries
values differ.
- Fix up some misspelled and add missing words in patch descriptions
- Fix up patch 6's description.

v12:
- Fix bug where a user could request no retries and skip going
through the scsi-eh.
- Drop support for allowing caller to have scsi-ml not retry
failures (we only allow caller to request retries).
- Fix formatting.
- Add support to control total number of retries.
- Fix kunit tests to add a missing test and comments.
- Fix missing SCMD_FAILURE_ASCQ_ANY in sd_spinup_disk.

v11:
- Document scsi_failure.result special values
- Fix sshdr fix git commit message where there was a missing word
- Use designated initializers for cdb setup
- Fix up various coding style comments from John like redoing if/else
error/success checks.
- Add patch to fix rdac issue where stale SCSH_DH values were returned
- Remove old comment from:
"[PATCH v10 16/33] scsi: spi: Have scsi-ml retry spi_execute errors"
- Drop EOPNOTSUPP use from:
"[PATCH v10 17/33] scsi: sd: Fix sshdr use in sd_suspend_common"
- Init errno to 0 when declared in:
"[PATCH v10 20/33] scsi: ch: Have scsi-ml retry ch_do_scsi errors"
- Add diffstat below

v10:
- Drop "," after {}.
- Hopefully fix outlook issues.

v9:
- Drop spi_execute changes from [PATCH] scsi: spi: Fix sshdr use
- Change git commit message for sshdr use fixes.

v8:
- Rebase.
- Saw the discussion about the possible bug where callers are
accessing the sshdr when it's not setup, so I added some patches
for that since I was going over the same code.

v7:
- Rebase against scsi_execute_cmd patchset.

v6:
- Fix kunit build when it's built as a module but scsi is not.
- Drop [PATCH 17/35] scsi: ufshcd: Convert to scsi_exec_req because
  that driver no longer uses scsi_execute.
- Convert ufshcd to use the scsi_failures struct because it now just does
  direct retries and does not do it's own deadline timing.
- Add back memset in read_capacity_16.
- Remove memset in get_sectorsize and replace with { } to init buf.

v5:
- Fix spelling (made sure I ran checkpatch strict)
- Drop SCMD_FAILURE_NONE
- Rename SCMD_FAILURE_ANY
- Fix media_not_present handling where it was being retried instead of
failed.
- Fix ILLEGAL_REQUEST handling in read_capacity_16 so it was not retried.
- Fix coding style, spelling and and naming convention in kunit and added
  more tests to handle cases like the media_not_present one where we want
  to force failures instead of retries.
- Drop cxlflash patch because it actually checked it's internal state before
  performing a retry which we currently do not support.

v4:
- Redefine cmd definitions if the cmd is touched.
- Fix up coding style issues.
- Use sam_status enum.
- Move failures initialization to scsi_initialize_rq
(also fixes KASAN error).
- Add kunit test.
- Add function comments.

v3:
- Use a for loop in scsi_check_passthrough
- Fix result handling/testing.
- Fix scsi_status_is_good handling.
- make __scsi_exec_req take a const arg
- Fix formatting in patch 24

v2:
- Rename scsi_prep_sense
- Change scsi_check_passthrough's loop and added some fixes
- Modified scsi_execute* so it uses a struct to pass in args

Comments

Christoph Hellwig Jan. 23, 2024, 7:49 a.m. UTC | #1
On Mon, Jan 22, 2024 at 06:22:01PM -0600, Mike Christie wrote:
> The following patches were made over Linus's tree which contains
> a fix for sd which was not in Martin's branches.
> 
> The patches allow scsi_execute_cmd users to have scsi-ml retry the
> cmd for it instead of the caller having to parse the error and loop
> itself.

Looks good:

Acked-by: Christoph Hellwig <hch@lst.de>

let's get this in early for 6.9..
Martin K. Petersen Jan. 30, 2024, 2:25 a.m. UTC | #2
Mike,

> The patches allow scsi_execute_cmd users to have scsi-ml retry the
> cmd for it instead of the caller having to parse the error and loop
> itself.

Applied to 6.9/scsi-staging, thanks!
Martin K. Petersen Feb. 6, 2024, 2:07 a.m. UTC | #3
On Mon, 22 Jan 2024 18:22:01 -0600, Mike Christie wrote:

> The following patches were made over Linus's tree which contains
> a fix for sd which was not in Martin's branches.
> 
> The patches allow scsi_execute_cmd users to have scsi-ml retry the
> cmd for it instead of the caller having to parse the error and loop
> itself.
> 
> [...]

Applied to 6.9/scsi-queue, thanks!

[01/19] scsi: Allow passthrough to request scsi-ml retries
        https://git.kernel.org/mkp/scsi/c/994724e6b3f0
[02/19] scsi: Have scsi-ml retry scsi_probe_lun errors
        https://git.kernel.org/mkp/scsi/c/2a1f96f60a4b
[03/19] scsi: retry INQUIRY after timeout
        https://git.kernel.org/mkp/scsi/c/987d7d3db0b9
[04/19] scsi: Use separate buf for START_STOP in sd_spinup_disk
        https://git.kernel.org/mkp/scsi/c/1008f5776fe5
[05/19] scsi: Have scsi-ml retry sd_spinup_disk errors
        https://git.kernel.org/mkp/scsi/c/c1acf38cd11e
[06/19] scsi: hp_sw: Have scsi-ml retry scsi_execute_cmd errors
        https://git.kernel.org/mkp/scsi/c/fabe3ee92e18
[07/19] scsi: rdac: Have scsi-ml retry send_mode_select errors
        https://git.kernel.org/mkp/scsi/c/f316ff46a0ff
[08/19] scsi: spi: Have scsi-ml retry spi_execute UAs
        https://git.kernel.org/mkp/scsi/c/5dbf10473642
[09/19] scsi: sd: Have scsi-ml retry sd_sync_cache errors
        https://git.kernel.org/mkp/scsi/c/183053203d45
[10/19] scsi: ch: Remove unit_attention
        https://git.kernel.org/mkp/scsi/c/11a26723210e
[11/19] scsi: ch: Have scsi-ml retry ch_do_scsi UAs
        https://git.kernel.org/mkp/scsi/c/e11f35c46ebd
[12/19] scsi: Have scsi-ml retry scsi_mode_sense UAs
        https://git.kernel.org/mkp/scsi/c/21bdff48e12b
[13/19] scsi: Have scsi-ml retry scsi_report_lun_scan errors
        https://git.kernel.org/mkp/scsi/c/8d24677ebb9e
[14/19] scsi: sd: Have pr commands retry UAs
        https://git.kernel.org/mkp/scsi/c/eea6ef3792e3
[15/19] scsi: sd: Have scsi-ml retry read_capacity_10 errors
        https://git.kernel.org/mkp/scsi/c/0f11328f2f46
[16/19] scsi: ses: Have scsi-ml retry scsi_execute_cmd errors
        https://git.kernel.org/mkp/scsi/c/3a7b4579328e
[17/19] scsi: sr: Have scsi-ml retry get_sectorsize errors
        https://git.kernel.org/mkp/scsi/c/b72f2d149e24
[18/19] scsi: ufs: Have scsi-ml retry start stop errors
        https://git.kernel.org/mkp/scsi/c/b8c3a7bac9b6
[19/19] scsi: Add kunit tests for scsi_check_passthrough
        https://git.kernel.org/mkp/scsi/c/25a1f7a0a1fe