mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
scsi: device_handlers: alua: Use combined sense codes
Refactor the SCSI ALUA devie handler driver to use the 16-bit 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> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Hannes Reinecke <hare@kernel.org> Link: https://patch.msgid.link/20260908090308.1085097-17-dlemoal@kernel.org Signed-off-by: Martin K. Petersen (Oracle) <mkp@kernel.org>
This commit is contained in:
parent
9f543ed64b
commit
8c88a86148
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user