linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/9] Retry READ CAPACITY(10)/(16) with good status but no data
@ 2025-10-02 19:25 Ewan D. Milne
  2025-10-02 19:25 ` [PATCH v4 1/9] scsi: Explicitly specify .ascq = 0x00 for ASC 0x28/0x29 scsi_failures Ewan D. Milne
                   ` (8 more replies)
  0 siblings, 9 replies; 34+ messages in thread
From: Ewan D. Milne @ 2025-10-02 19:25 UTC (permalink / raw)
  To: linux-scsi; +Cc: michael.christie, dgilbert, bvanassche, dlemoal, hare

We encountered a SCSI device that responded to the initial READ CAPACITY command
with a good status, but no data was transferred.  This caused a sudden change of
the device capacity to zero when the device was rescanned, for no obvious reason.

This patch series changes read_capacity_10() and read_capacity_16() in sd.c
to retry the command up to 3 times in an attempt to get valid capacity information.
A message is logged if this is ultimately unsuccessful.

There are some predecessor patches, one from a patch in a series by Mike Christie
which changes read_capacity_16() to use the scsi_failures mechanism (which did
not eventually get merged), this makes the changes here much more similar for
both the read_capacity_10 and read_capacity_16() case.  Another patch corrects
a potential use of an uninitialized variable, and a third one removes a check
for -EOVERFLOW that hasn't been needed since commit 72deb455b5ec
("block: remove CONFIG_LBDAF").  Other patches fill in missing .ascq entries
in the scsi_failures array and address other review comments.

The final patches to scsi_debug allow insertion of the fault to test this change.

Changes in v4:
  - Add "only_once" module option to scsi_debug to allow testing of retry logic
  - Reset sdeb_inject_pending after OPT_NO_DATA fault is injected
  - Changed one patch subject message to be less verbose
  - Clarlified one commit message
  - Simplified a conditional in 2 places in one patch, and 1 in another

Changes in v3:
  - Removed patch to pass the length of the buffer through the sd_read_capacity()
    call chain and adjusted other patches accordingly.  Use RC10/16_LEN for memset()
  - Removed supurfluous parenthesis in conditionals

Changes in v2:
  - Added patches to explicitly specify .ascq in scsi_features usage
  - Pass the length of the buffer used through the sd_read_capacity() call chain
  - Simplify a conditional in scsi_probe_lun() that was requested in similar
    code in read_capacity_16()/read_capacity_10()
  - Changed code in scsi_debug() to make only one call to scsi_set_resid()
  - Moved some declarations around in read_capacity_16()/read_capacity_10()
    and memset() the whole buffer instead of the expected data size
  - Add the newly added flag SDEBUG_NO_DATA to SDEBUG_OPT_ALL_INJECTING

Ewan D. Milne (9):
  scsi: Explicitly specify .ascq = 0x00 for ASC 0x28/0x29 scsi_failures
  scsi: sd: Do not retry ASC 0x3a in read_capacity_10() with any ASCQ
  scsi: sd: Have scsi-ml retry read_capacity_16 errors
  scsi: sd: Avoid passing potentially uninitialized "sense_valid" to
    read_capacity_error()
  scsi: sd: Remove checks for -EOVERFLOW in sd_read_capacity()
  scsi: sd: Check for and retry in case of READ_CAPCITY(10)/(16)
    returning no data
  scsi: Simplify nested if conditional in scsi_probe_lun()
  scsi: scsi_debug: Add option to suppress returned data but return good
    status
  scsi: scsi_debug: Add "only_once" module option to inject an error one
    time

 drivers/scsi/scsi_debug.c |  99 +++++++++++++++++-----
 drivers/scsi/scsi_scan.c  |  20 ++---
 drivers/scsi/sd.c         | 167 ++++++++++++++++++++++++++++----------
 3 files changed, 212 insertions(+), 74 deletions(-)

-- 
2.47.1


^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2025-10-06 17:55 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-02 19:25 [PATCH v4 0/9] Retry READ CAPACITY(10)/(16) with good status but no data Ewan D. Milne
2025-10-02 19:25 ` [PATCH v4 1/9] scsi: Explicitly specify .ascq = 0x00 for ASC 0x28/0x29 scsi_failures Ewan D. Milne
2025-10-03  4:24   ` Damien Le Moal
2025-10-06  6:59   ` Hannes Reinecke
2025-10-02 19:25 ` [PATCH v4 2/9] scsi: sd: Do not retry ASC 0x3a in read_capacity_10() with any ASCQ Ewan D. Milne
2025-10-03  4:24   ` Damien Le Moal
2025-10-03 14:40     ` Ewan Milne
2025-10-03 15:44       ` Bart Van Assche
2025-10-03 18:40         ` Ewan Milne
2025-10-06 17:54           ` Bart Van Assche
2025-10-02 19:25 ` [PATCH v4 3/9] scsi: sd: Have scsi-ml retry read_capacity_16 errors Ewan D. Milne
2025-10-06  2:00   ` Damien Le Moal
2025-10-06  7:01   ` Hannes Reinecke
2025-10-02 19:25 ` [PATCH v4 4/9] scsi: sd: Avoid passing potentially uninitialized "sense_valid" to read_capacity_error() Ewan D. Milne
2025-10-06  2:02   ` Damien Le Moal
2025-10-06  7:06   ` Hannes Reinecke
2025-10-02 19:25 ` [PATCH v4 5/9] scsi: sd: Remove checks for -EOVERFLOW in sd_read_capacity() Ewan D. Milne
2025-10-06  2:04   ` Damien Le Moal
2025-10-06  7:07   ` Hannes Reinecke
2025-10-02 19:25 ` [PATCH v4 6/9] scsi: sd: Check for and retry in case of READ_CAPCITY(10)/(16) returning no data Ewan D. Milne
2025-10-06  2:06   ` Damien Le Moal
2025-10-06  7:10   ` Hannes Reinecke
2025-10-06  7:20     ` Damien Le Moal
2025-10-06  7:25       ` Damien Le Moal
2025-10-06 10:59         ` Hannes Reinecke
2025-10-02 19:25 ` [PATCH v4 7/9] scsi: Simplify nested if conditional in scsi_probe_lun() Ewan D. Milne
2025-10-06  2:07   ` Damien Le Moal
2025-10-06  7:11   ` Hannes Reinecke
2025-10-02 19:25 ` [PATCH v4 8/9] scsi: scsi_debug: Add option to suppress returned data but return good status Ewan D. Milne
2025-10-06  2:09   ` Damien Le Moal
2025-10-06  7:12   ` Hannes Reinecke
2025-10-02 19:25 ` [PATCH v4 9/9] scsi: scsi_debug: Add "only_once" module option to inject an error one time Ewan D. Milne
2025-10-06  2:12   ` Damien Le Moal
2025-10-06  7:12   ` Hannes Reinecke

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).