[PATCH v11 01/34] scsi: Add helper to prep sense during error handling

Mike Christie
2023-09-05T23:24:50Z

This breaks out the sense prep so it can be used in helper that will be
added in this patchset for passthrough commands.

Signed-off-by: Mike Christie <michael.christie@oracle.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
---
drivers/scsi/scsi_error.c | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index c67cdcdc3ba8..7c3eccbdd39f 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -523,6 +523,23 @@ static inline void set_scsi_ml_byte(struct scsi_cmnd *cmd, u8 status)
cmd->result = (cmd->result & 0xffff00ff) | (status << 8);
}

+static enum scsi_disposition
+scsi_start_sense_processing(struct scsi_cmnd *scmd,
+ struct scsi_sense_hdr *sshdr)
+{
+ struct scsi_device *sdev = scmd->device;
+
+ if (!scsi_command_normalize_sense(scmd, sshdr))
+ return FAILED; /* no valid sense data */
+
+ scsi_report_sense(sdev, sshdr);
+
+ if (scsi_sense_is_deferred(sshdr))
+ return NEEDS_RETRY;
+
+ return SUCCESS;
+}
+
/**
* scsi_check_sense - Examine scsi cmd sense
* @scmd: Cmd to have sense checked.
@@ -539,14 +556,11 @@ enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd)
struct request *req = scsi_cmd_to_rq(scmd);
struct scsi_device *sdev = scmd->device;
struct scsi_sense_hdr sshdr;
+ enum scsi_disposition ret;

- if (! scsi_command_normalize_sense(scmd, &sshdr))
- return FAILED; /* no valid sense data */
-
- scsi_report_sense(sdev, &sshdr);
-
- if (scsi_sense_is_deferred(&sshdr))
- return NEEDS_RETRY;
+ ret = scsi_start_sense_processing(scmd, &sshdr);
+ if (ret != SUCCESS)
+ return ret;

if (sdev->handler && sdev->handler->check_sense) {
enum scsi_disposition rc;
--
2.34.1