| Message ID | 20260831020451.585944-21-dlemoal@kernel.org |
|---|---|
| State | New |
| Headers | show |
| Series | Use defined 16-bits ASC/ASCQ combinations | expand |
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: Pre-existing issues: - [High] The driver synthesizes a CHECK_CONDITION for REPORT_LUNS when a data underrun occurs but fails to update `scmd->result`. -- commit 909befd157ab89fe2f70728b01ba29158ee9d0b5 Author: Damien Le Moal <dlemoal@kernel.org> scsi: leapraid: use 16-bits defined sense codes This refactors the leapraid driver to use the 16-bit sense_code field of struct scsi_sense_hdr and replaces all hard-coded additional sense codes with enum values. It deletes the locally defined macros for ASC and ASCQ values in favor of standard definitions. > diff --git a/drivers/scsi/leapraid/leapraid_os.c b/drivers/scsi/leapraid/leapraid_os.c > index ee3242779dfdf..eb8b114399231 100644 > --- a/drivers/scsi/leapraid/leapraid_os.c > +++ b/drivers/scsi/leapraid/leapraid_os.c [ ... ] > @@ -382,9 +382,8 @@ static void leapraid_handle_data_underrun( > } else if (!xfer_cnt && scmd->cmnd[0] == REPORT_LUNS) { > scsiio_rep->scsi_state = LEAPRAID_SCSI_STATE_AUTOSENSE_VALID; > scsiio_rep->scsi_status = SAM_STAT_CHECK_CONDITION; > - scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, > - LEAPRAID_SCSI_ASC_INVALID_CMD_CODE, > - LEAPRAID_SCSI_ASCQ_DEFAULT); > + scsi_set_sense(scmd, 0, ILLEGAL_REQUEST, > + INVALID_COMMAND_OP_CODE); [Severity: High] This is a pre-existing issue, but should this code also update scmd->result with the new status? Because scmd->result is not updated with SAM_STAT_CHECK_CONDITION in leapraid_handle_data_underrun(), it retains the initial DID_OK | scsi_status (which is typically 0 here). Doesn't this cause leapraid_scsiio_done_dispatch() to return early, hiding the synthesized ILLEGAL_REQUEST sense data from the SCSI midlayer and breaking LUN discovery when a data underrun occurs? > } > }
diff --git a/drivers/scsi/leapraid/leapraid_func.h b/drivers/scsi/leapraid/leapraid_func.h index 4c0b9ca728d8..879d8cd5ec03 100644 --- a/drivers/scsi/leapraid/leapraid_func.h +++ b/drivers/scsi/leapraid/leapraid_func.h @@ -113,7 +113,6 @@ #define DESC_FORMAT_THRESHOLD 0x72 #define SENSE_KEY_MASK 0x0F #define SCSI_SENSE_RESPONSE_CODE_MASK 0x7F -#define ASC_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5D #define LEAPRAID_LARGE_DISK_THRESHOLD 0x200000UL #define LEAPRAID_LARGE_DISK_HEADS 255 #define LEAPRAID_LARGE_DISK_SECTORS 63 @@ -126,12 +125,6 @@ #define LEAPRAID_SCSI_HOST_SHIFT 16 #define LEAPRAID_SCSI_DRIVER_SHIFT 24 -/* SCSI ASC/ASCQ definitions. */ -#define LEAPRAID_SCSI_ASCQ_DEFAULT 0x00 -#define LEAPRAID_SCSI_ASC_POWER_ON_RESET 0x29 -#define LEAPRAID_SCSI_ASC_INVALID_CMD_CODE 0x20 -#define LEAPRAID_SCSI_ASCQ_POWER_ON_RESET 0x07 - /* VPD Page 0x89 (ATA Information). */ #define LEAPRAID_VPD_PAGE_ATA_INFO 0x89 #define LEAPRAID_VPD_PG89_MAX_LEN 255 diff --git a/drivers/scsi/leapraid/leapraid_os.c b/drivers/scsi/leapraid/leapraid_os.c index ee3242779dfd..eb8b11439923 100644 --- a/drivers/scsi/leapraid/leapraid_os.c +++ b/drivers/scsi/leapraid/leapraid_os.c @@ -382,9 +382,8 @@ static void leapraid_handle_data_underrun( } else if (!xfer_cnt && scmd->cmnd[0] == REPORT_LUNS) { scsiio_rep->scsi_state = LEAPRAID_SCSI_STATE_AUTOSENSE_VALID; scsiio_rep->scsi_status = SAM_STAT_CHECK_CONDITION; - scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, - LEAPRAID_SCSI_ASC_INVALID_CMD_CODE, - LEAPRAID_SCSI_ASCQ_DEFAULT); + scsi_set_sense(scmd, 0, ILLEGAL_REQUEST, + INVALID_COMMAND_OP_CODE); } } @@ -515,8 +514,9 @@ static void leapraid_scsiio_done_dispatch( &sshdr)) dev_warn(&adapter->pdev->dev, "Sense: key=0x%x asc=0x%x ascq=0x%x\n", - sshdr.sense_key, sshdr.asc, - sshdr.ascq); + sshdr.sense_key, + scsi_sense_asc(&sshdr), + scsi_sense_ascq(&sshdr)); else dev_warn(&adapter->pdev->dev, "Sense: Invalid sense data\n"); @@ -810,9 +810,8 @@ static bool leapraid_should_queuecommand(struct leapraid_adapter *adapter, if (sdev_priv->block && scsi_get_host_state(scmd->device->host) == SHOST_RECOVERY && scmd->cmnd[0] == TEST_UNIT_READY) { - scsi_build_sense(scmd, 0, UNIT_ATTENTION, - LEAPRAID_SCSI_ASC_POWER_ON_RESET, - LEAPRAID_SCSI_ASCQ_POWER_ON_RESET); + scsi_set_sense(scmd, 0, UNIT_ATTENTION, + I_T_NEXUS_LOSS_OCCURRED); goto scsiio_done; }
Refactor the leapraid driver to use the 16-bits sense_code field of struct scsi_sense_hdr and replace all hard-coded additional sense codes and additional sense code qualifiers with the enum values defined in include/scsi/scsi_sense.h. This helps with code clarity as the sense codes being processed are easier to test and self-documented. With this change, the locally defined macros for ASC and ASCQ values are deleted. No functional change intended. Signed-off-by: Damien Le Moal <dlemoal@kernel.org> --- drivers/scsi/leapraid/leapraid_func.h | 7 ------- drivers/scsi/leapraid/leapraid_os.c | 15 +++++++-------- 2 files changed, 7 insertions(+), 15 deletions(-)