scsi: Add ALUA state change UA handling
Log the ALUA state change unit attention correctly with the message log and emit an event to allow user-space tools to react to it. Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Ewan D. Milne <emilne@redhat.com> Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com> Signed-off-by: James Bottomley <JBottomley@Odin.com>
This commit is contained in:
parent
e819cdb198
commit
14c3e677df
|
@ -421,6 +421,10 @@ static void scsi_report_sense(struct scsi_device *sdev,
|
||||||
evt_type = SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED;
|
evt_type = SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED;
|
||||||
sdev_printk(KERN_WARNING, sdev,
|
sdev_printk(KERN_WARNING, sdev,
|
||||||
"Mode parameters changed");
|
"Mode parameters changed");
|
||||||
|
} else if (sshdr->asc == 0x2a && sshdr->ascq == 0x06) {
|
||||||
|
evt_type = SDEV_EVT_ALUA_STATE_CHANGE_REPORTED;
|
||||||
|
sdev_printk(KERN_WARNING, sdev,
|
||||||
|
"Asymmetric access state changed");
|
||||||
} else if (sshdr->asc == 0x2a && sshdr->ascq == 0x09) {
|
} else if (sshdr->asc == 0x2a && sshdr->ascq == 0x09) {
|
||||||
evt_type = SDEV_EVT_CAPACITY_CHANGE_REPORTED;
|
evt_type = SDEV_EVT_CAPACITY_CHANGE_REPORTED;
|
||||||
sdev_printk(KERN_WARNING, sdev,
|
sdev_printk(KERN_WARNING, sdev,
|
||||||
|
|
|
@ -2712,6 +2712,9 @@ static void scsi_evt_emit(struct scsi_device *sdev, struct scsi_event *evt)
|
||||||
case SDEV_EVT_LUN_CHANGE_REPORTED:
|
case SDEV_EVT_LUN_CHANGE_REPORTED:
|
||||||
envp[idx++] = "SDEV_UA=REPORTED_LUNS_DATA_HAS_CHANGED";
|
envp[idx++] = "SDEV_UA=REPORTED_LUNS_DATA_HAS_CHANGED";
|
||||||
break;
|
break;
|
||||||
|
case SDEV_EVT_ALUA_STATE_CHANGE_REPORTED:
|
||||||
|
envp[idx++] = "SDEV_UA=ASYMMETRIC_ACCESS_STATE_CHANGED";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
/* do nothing */
|
/* do nothing */
|
||||||
break;
|
break;
|
||||||
|
@ -2815,6 +2818,7 @@ struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type,
|
||||||
case SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED:
|
case SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED:
|
||||||
case SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED:
|
case SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED:
|
||||||
case SDEV_EVT_LUN_CHANGE_REPORTED:
|
case SDEV_EVT_LUN_CHANGE_REPORTED:
|
||||||
|
case SDEV_EVT_ALUA_STATE_CHANGE_REPORTED:
|
||||||
default:
|
default:
|
||||||
/* do nothing */
|
/* do nothing */
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -57,9 +57,10 @@ enum scsi_device_event {
|
||||||
SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED, /* 38 07 UA reported */
|
SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED, /* 38 07 UA reported */
|
||||||
SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED, /* 2A 01 UA reported */
|
SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED, /* 2A 01 UA reported */
|
||||||
SDEV_EVT_LUN_CHANGE_REPORTED, /* 3F 0E UA reported */
|
SDEV_EVT_LUN_CHANGE_REPORTED, /* 3F 0E UA reported */
|
||||||
|
SDEV_EVT_ALUA_STATE_CHANGE_REPORTED, /* 2A 06 UA reported */
|
||||||
|
|
||||||
SDEV_EVT_FIRST = SDEV_EVT_MEDIA_CHANGE,
|
SDEV_EVT_FIRST = SDEV_EVT_MEDIA_CHANGE,
|
||||||
SDEV_EVT_LAST = SDEV_EVT_LUN_CHANGE_REPORTED,
|
SDEV_EVT_LAST = SDEV_EVT_ALUA_STATE_CHANGE_REPORTED,
|
||||||
|
|
||||||
SDEV_EVT_MAXBITS = SDEV_EVT_LAST + 1
|
SDEV_EVT_MAXBITS = SDEV_EVT_LAST + 1
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue