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

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 patch to scsi_debug is allow insertion of the fault to test this change.

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 (8):
  scsi: Explicitly specify .ascq = 0x00 for ASC 0x28/0x29 scsi_failures
  scsi: sd: Explicitly specify .ascq = SCMD_FAILURE_ASCQ_ANY for ASC
    0x3a
  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

 drivers/scsi/scsi_debug.c |  47 ++++++++---
 drivers/scsi/scsi_scan.c  |   7 +-
 drivers/scsi/sd.c         | 167 ++++++++++++++++++++++++++++----------
 3 files changed, 162 insertions(+), 59 deletions(-)

-- 
2.47.1


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

end of thread, other threads:[~2025-08-20 11:45 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-15 21:15 [PATCH v3 0/8] Retry READ CAPACITY(10)/(16) with good status but no data Ewan D. Milne
2025-08-15 21:15 ` [PATCH v3 1/8] scsi: Explicitly specify .ascq = 0x00 for ASC 0x28/0x29 scsi_failures Ewan D. Milne
2025-08-16  0:36   ` Damien Le Moal
2025-08-19 19:28   ` Bart Van Assche
2025-08-20 11:39   ` Hannes Reinecke
2025-08-15 21:15 ` [PATCH v3 2/8] scsi: sd: Explicitly specify .ascq = SCMD_FAILURE_ASCQ_ANY for ASC 0x3a Ewan D. Milne
2025-08-16  0:37   ` Damien Le Moal
2025-08-19 19:34   ` Bart Van Assche
2025-08-20 11:39   ` Hannes Reinecke
2025-08-15 21:15 ` [PATCH v3 3/8] scsi: sd: Have scsi-ml retry read_capacity_16 errors Ewan D. Milne
2025-08-16  0:42   ` Damien Le Moal
2025-08-19 19:37   ` Bart Van Assche
2025-08-20 11:40   ` Hannes Reinecke
2025-08-15 21:15 ` [PATCH v3 4/8] scsi: sd: Avoid passing potentially uninitialized "sense_valid" to read_capacity_error() Ewan D. Milne
2025-08-16  0:44   ` Damien Le Moal
2025-08-19 19:38   ` Bart Van Assche
2025-08-20 11:41   ` Hannes Reinecke
2025-08-15 21:15 ` [PATCH v3 5/8] scsi: sd: Remove checks for -EOVERFLOW in sd_read_capacity() Ewan D. Milne
2025-08-16  0:45   ` Damien Le Moal
2025-08-19 19:38   ` Bart Van Assche
2025-08-20 11:41   ` Hannes Reinecke
2025-08-15 21:15 ` [PATCH v3 6/8] scsi: sd: Check for and retry in case of READ_CAPCITY(10)/(16) returning no data Ewan D. Milne
2025-08-16  0:53   ` Damien Le Moal
2025-08-19 19:40     ` Bart Van Assche
2025-08-20 11:44   ` Hannes Reinecke
2025-08-15 21:15 ` [PATCH v3 7/8] scsi: Simplify nested if conditional in scsi_probe_lun() Ewan D. Milne
2025-08-16  0:56   ` Damien Le Moal
2025-08-20 11:44   ` Hannes Reinecke
2025-08-15 21:15 ` [PATCH v3 8/8] scsi: scsi_debug: Add option to suppress returned data but return good status Ewan D. Milne
2025-08-16  0:59   ` Damien Le Moal
2025-08-20 11:45     ` 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).