Commit a5d518cd authored by Kai Mäkisara's avatar Kai Mäkisara Committed by Martin K. Petersen
Browse files

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: default avatarKai Mäkisara <Kai.Makisara@kolumbus.fi>
Link: https://lore.kernel.org/r/20250120194925.44432-3-Kai.Makisara@kolumbus.fi


Reviewed-by: default avatarJohn Meneghini <jmeneghi@redhat.com>
Tested-by: default avatarJohn Meneghini <jmeneghi@redhat.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 7081dc75
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -547,6 +547,18 @@ enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd)

	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))
		return NEEDS_RETRY;

+3 −0
Original line number Diff line number Diff line
@@ -247,6 +247,9 @@ struct scsi_device {
	unsigned int queue_stopped;	/* request queue is quiesced */
	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 */

	DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */