mirror of https://github.com/torvalds/linux.git
scsi: core: Add counters for New Media and Power On/Reset UNIT ATTENTIONs
The purpose of the counters is to enable all ULDs attached to a device to find out that a New Media or/and Power On/Reset Unit Attentions has/have been set, even if another ULD catches the Unit Attention as response to a SCSI command. The ULDs can read the counters and see if the values have changed from the previous check. Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi> Link: https://lore.kernel.org/r/20250120194925.44432-3-Kai.Makisara@kolumbus.fi Reviewed-by: John Meneghini <jmeneghi@redhat.com> Tested-by: John Meneghini <jmeneghi@redhat.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
7081dc75df
commit
a5d518cd4e
|
|
@ -547,6 +547,18 @@ enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd)
|
||||||
|
|
||||||
scsi_report_sense(sdev, &sshdr);
|
scsi_report_sense(sdev, &sshdr);
|
||||||
|
|
||||||
|
if (sshdr.sense_key == UNIT_ATTENTION) {
|
||||||
|
/*
|
||||||
|
* Increment the counters for Power on/Reset or New Media so
|
||||||
|
* that all ULDs interested in these can see that those have
|
||||||
|
* happened, even if someone else gets the sense data.
|
||||||
|
*/
|
||||||
|
if (sshdr.asc == 0x28)
|
||||||
|
scmd->device->ua_new_media_ctr++;
|
||||||
|
else if (sshdr.asc == 0x29)
|
||||||
|
scmd->device->ua_por_ctr++;
|
||||||
|
}
|
||||||
|
|
||||||
if (scsi_sense_is_deferred(&sshdr))
|
if (scsi_sense_is_deferred(&sshdr))
|
||||||
return NEEDS_RETRY;
|
return NEEDS_RETRY;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -247,6 +247,9 @@ struct scsi_device {
|
||||||
unsigned int queue_stopped; /* request queue is quiesced */
|
unsigned int queue_stopped; /* request queue is quiesced */
|
||||||
bool offline_already; /* Device offline message logged */
|
bool offline_already; /* Device offline message logged */
|
||||||
|
|
||||||
|
unsigned int ua_new_media_ctr; /* Counter for New Media UNIT ATTENTIONs */
|
||||||
|
unsigned int ua_por_ctr; /* Counter for Power On / Reset UAs */
|
||||||
|
|
||||||
atomic_t disk_events_disable_depth; /* disable depth for disk events */
|
atomic_t disk_events_disable_depth; /* disable depth for disk events */
|
||||||
|
|
||||||
DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
|
DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue