@@ -491,9 +491,9 @@ static int mode_select_handle_sense(struct scsi_device *sdev,
return SCSI_DH_IO;
RDAC_LOG(RDAC_LOG_FAILOVER, sdev, "array %s, ctlr %d, "
- "MODE_SELECT returned with sense %02x/%02x/%02x",
+ "MODE_SELECT returned with sense 0x%02x/0x%04x",
(char *) h->ctlr->array_name, h->ctlr->index,
- sense_hdr->sense_key, sense_hdr->asc, sense_hdr->ascq);
+ sense_hdr->sense_key, sense_hdr->sense_code);
return SCSI_DH_IO;
}
@@ -515,34 +515,28 @@ static void send_mode_select(struct work_struct *work)
struct scsi_failure failure_defs[] = {
{
.sense_key = NO_SENSE,
- .asc = SCMD_FAILURE_ASC_ANY,
- .ascq = SCMD_FAILURE_ASCQ_ANY,
+ .sense_code = SCMD_FAILURE_SENSE_CODE_ANY,
.result = SAM_STAT_CHECK_CONDITION,
},
{
.sense_key = ABORTED_COMMAND,
- .asc = SCMD_FAILURE_ASC_ANY,
- .ascq = SCMD_FAILURE_ASCQ_ANY,
+ .sense_code = SCMD_FAILURE_SENSE_CODE_ANY,
.result = SAM_STAT_CHECK_CONDITION,
},
{
.sense_key = UNIT_ATTENTION,
- .asc = SCMD_FAILURE_ASC_ANY,
- .ascq = SCMD_FAILURE_ASCQ_ANY,
+ .sense_code = SCMD_FAILURE_SENSE_CODE_ANY,
.result = SAM_STAT_CHECK_CONDITION,
},
- /* LUN Not Ready and is in the Process of Becoming Ready */
{
.sense_key = NOT_READY,
- .asc = 0x04,
- .ascq = 0x01,
+ .sense_code = LU_IS_IN_PROCESS_OF_BECOMING_READY,
.result = SAM_STAT_CHECK_CONDITION,
},
- /* Command Lock contention */
+ /* Command Lock contention (not a standard sense code) */
{
.sense_key = ILLEGAL_REQUEST,
- .asc = 0x91,
- .ascq = 0x36,
+ .sense_code = scsi_sense_code(0x91, 0x36),
.allowed = SCMD_FAILURE_NO_LIMIT,
.result = SAM_STAT_CHECK_CONDITION,
},
@@ -675,32 +669,32 @@ static enum scsi_disposition rdac_check_sense(struct scsi_device *sdev,
struct rdac_dh_data *h = sdev->handler_data;
RDAC_LOG(RDAC_LOG_SENSE, sdev, "array %s, ctlr %d, "
- "I/O returned with sense %02x/%02x/%02x",
+ "I/O returned with sense 0x%02x/0x%04x",
(char *) h->ctlr->array_name, h->ctlr->index,
- sense_hdr->sense_key, sense_hdr->asc, sense_hdr->ascq);
+ sense_hdr->sense_key, sense_hdr->sense_code);
switch (sense_hdr->sense_key) {
case NOT_READY:
- if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x01)
+ if (sense_hdr->sense_code == LU_IS_IN_PROCESS_OF_BECOMING_READY)
/* LUN Not Ready - Logical Unit Not Ready and is in
* the process of becoming ready
* Just retry.
*/
return ADD_TO_MLQUEUE;
- if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x81)
+ if (sense_hdr->sense_code == scsi_sense_code(0x04, 0x81))
/* LUN Not Ready - Storage firmware incompatible
* Manual code synchonisation required.
*
* Nothing we can do here. Try to bypass the path.
*/
return SUCCESS;
- if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0xA1)
+ if (sense_hdr->sense_code == scsi_sense_code(0x04, 0xA1))
/* LUN Not Ready - Quiescense in progress
*
* Just retry and wait.
*/
return ADD_TO_MLQUEUE;
- if (sense_hdr->asc == 0xA1 && sense_hdr->ascq == 0x02)
+ if (sense_hdr->sense_code == scsi_sense_code(0xA1, 0x02))
/* LUN Not Ready - Quiescense in progress
* or has been achieved
* Just retry.
@@ -708,7 +702,7 @@ static enum scsi_disposition rdac_check_sense(struct scsi_device *sdev,
return ADD_TO_MLQUEUE;
break;
case ILLEGAL_REQUEST:
- if (sense_hdr->asc == 0x94 && sense_hdr->ascq == 0x01) {
+ if (sense_hdr->sense_code == scsi_sense_code(0x94, 0x01)) {
/* Invalid Request - Current Logical Unit Ownership.
* Controller is not the current owner of the LUN,
* Fail the path, so that the other path be used.
@@ -718,12 +712,13 @@ static enum scsi_disposition rdac_check_sense(struct scsi_device *sdev,
}
break;
case UNIT_ATTENTION:
- if (sense_hdr->asc == 0x29 && sense_hdr->ascq == 0x00)
+ if (sense_hdr->sense_code ==
+ POWER_ON_RESET_OR_BUS_DEVICE_RESET_OCCURRED)
/*
* Power On, Reset, or Bus Device Reset, just retry.
*/
return ADD_TO_MLQUEUE;
- if (sense_hdr->asc == 0x8b && sense_hdr->ascq == 0x02)
+ if (sense_hdr->sense_code == scsi_sense_code(0x8b, 0x02))
/*
* Quiescence in progress , just retry.
*/
Refactor the NetApp E-Series RDAC SCSI device handler driver to use the 16-bits sense_code field of struct scsi_sense_hdr and struct scsi_failure 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. No functional change intended. Signed-off-by: Damien Le Moal <dlemoal@kernel.org> --- drivers/scsi/device_handler/scsi_dh_rdac.c | 41 ++++++++++------------ 1 file changed, 18 insertions(+), 23 deletions(-)