Commit 96bcc722 authored by Peter Jones's avatar Peter Jones Committed by James Bottomley

[SCSI] sr: report more accurate drive status after closing the tray.

So, what's happening here is that the drive is reporting a sense of
2/4/1 ("logical unit is becoming ready") from sr_test_unit_ready(), and
then we ask for the media event notification before checking that result
at all.  The check_media_event_descriptor() call isn't getting a check
condition, but it's also reporting that the tray is closed and that
there's no media.  In actuality it doesn't yet know if there's media or
not, but there's no way to express that in the media event status field.

My current thought is that if it told us the device isn't yet ready, we
should return that immediately, since there's nothing that'll tell us
any more data than that reliably:
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent ce8a7424
...@@ -309,6 +309,11 @@ int sr_drive_status(struct cdrom_device_info *cdi, int slot) ...@@ -309,6 +309,11 @@ int sr_drive_status(struct cdrom_device_info *cdi, int slot)
if (0 == sr_test_unit_ready(cd->device, &sshdr)) if (0 == sr_test_unit_ready(cd->device, &sshdr))
return CDS_DISC_OK; return CDS_DISC_OK;
/* SK/ASC/ASCQ of 2/4/1 means "unit is becoming ready" */
if (scsi_sense_valid(&sshdr) && sshdr.sense_key == NOT_READY
&& sshdr.asc == 0x04 && sshdr.ascq == 0x01)
return CDS_DRIVE_NOT_READY;
if (!cdrom_get_media_event(cdi, &med)) { if (!cdrom_get_media_event(cdi, &med)) {
if (med.media_present) if (med.media_present)
return CDS_DISC_OK; return CDS_DISC_OK;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment