@@ -433,61 +433,43 @@ static enum scsi_disposition alua_check_sense(struct scsi_device *sdev,
{
switch (sense_hdr->sense_key) {
case NOT_READY:
- if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x0a) {
- /*
- * LUN Not Accessible - ALUA state transition
- */
+ if (sense_hdr->sense_code ==
+ LU_NOT_ACCESSIBLE_ASYMMETRIC_ACCESS_STATE_TRANSITION) {
alua_handle_state_transition(sdev);
return NEEDS_RETRY;
}
break;
case UNIT_ATTENTION:
- if (sense_hdr->asc == 0x04 && sense_hdr->ascq == 0x0a) {
- /*
- * LUN Not Accessible - ALUA state transition
- */
+ if (sense_hdr->sense_code ==
+ LU_NOT_ACCESSIBLE_ASYMMETRIC_ACCESS_STATE_TRANSITION) {
alua_handle_state_transition(sdev);
return NEEDS_RETRY;
}
- 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.
* Might have obscured a state transition,
* so schedule a recheck.
*/
alua_check(sdev, true);
return ADD_TO_MLQUEUE;
}
- if (sense_hdr->asc == 0x29 && sense_hdr->ascq == 0x04)
- /*
- * Device internal reset
- */
+ if (sense_hdr->sense_code == DEVICE_INTERNAL_RESET)
return ADD_TO_MLQUEUE;
- if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x01)
- /*
- * Mode Parameters Changed
- */
+ if (sense_hdr->sense_code == MODE_PARAMETERS_CHANGED)
return ADD_TO_MLQUEUE;
- if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x06) {
- /*
- * ALUA state changed
- */
+ if (sense_hdr->sense_code == ASYMMETRIC_ACCESS_STATE_CHANGED) {
alua_check(sdev, true);
return ADD_TO_MLQUEUE;
}
- if (sense_hdr->asc == 0x2a && sense_hdr->ascq == 0x07) {
- /*
- * Implicit ALUA state transition failed
- */
+ if (sense_hdr->sense_code ==
+ IMPLICIT_ASYMMETRIC_ACCESS_STATE_TRANSITION_FAILED) {
alua_check(sdev, true);
return ADD_TO_MLQUEUE;
}
- if (sense_hdr->asc == 0x3f && sense_hdr->ascq == 0x03)
- /*
- * Inquiry data has changed
- */
+ if (sense_hdr->sense_code == INQUIRY_DATA_HAS_CHANGED)
return ADD_TO_MLQUEUE;
- if (sense_hdr->asc == 0x3f && sense_hdr->ascq == 0x0e)
+ if (sense_hdr->sense_code == REPORTED_LUNS_DATA_HAS_CHANGED)
/*
* REPORTED_LUNS_DATA_HAS_CHANGED is reported
* when switching controllers on targets like
@@ -517,12 +499,12 @@ static int alua_tur(struct scsi_device *sdev)
ALUA_FAILOVER_RETRIES, &sense_hdr);
if ((sense_hdr.sense_key == NOT_READY ||
sense_hdr.sense_key == UNIT_ATTENTION) &&
- sense_hdr.asc == 0x04 && sense_hdr.ascq == 0x0a)
+ sense_hdr.sense_code ==
+ LU_NOT_ACCESSIBLE_ASYMMETRIC_ACCESS_STATE_TRANSITION)
return SCSI_DH_RETRY;
- else if (retval)
+ if (retval)
return SCSI_DH_IO;
- else
- return SCSI_DH_OK;
+ return SCSI_DH_OK;
}
/*
@@ -619,7 +601,8 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg)
* transition. So set the state to 'transitioning' directly.
*/
if (sense_hdr.sense_key == NOT_READY &&
- sense_hdr.asc == 0x04 && sense_hdr.ascq == 0x0a) {
+ sense_hdr.sense_code ==
+ LU_NOT_ACCESSIBLE_ASYMMETRIC_ACCESS_STATE_TRANSITION) {
transitioning_sense = true;
goto skip_rtpg;
}
Refactor the SCSI ALUA devie handler 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. No functional change intended. Signed-off-by: Damien Le Moal <dlemoal@kernel.org> --- drivers/scsi/device_handler/scsi_dh_alua.c | 55 ++++++++-------------- 1 file changed, 19 insertions(+), 36 deletions(-)