From efc416333b4b3776fdfe0fdb7dc88fb11d48738e Mon Sep 17 00:00:00 2001
From: Michal Suchanek <msuchanek@suse.de>
Date: Wed, 1 Nov 2017 19:09:12 +0100
Subject: [PATCH 4/4] scsi: sr: wait for the medium to become ready.
Patch-mainline: no, kabi
References: bsc#1048585
When opening the cd-rom determine disk status. As a sideeffect the
logic that waits for the disk to become ready is invoked.
NOTE: this is alternative to changing the cdrom.c interface to be able
to do this in driver-neutral way.
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
---
drivers/scsi/sr.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -538,6 +538,19 @@ static int sr_block_open(struct block_de
ret = cdrom_open(&cd->cdi, bdev, mode);
mutex_unlock(&sr_mutex);
+ /* wait for drive to get ready */
+ if ((ret == -ENOMEDIUM) && !(mode & FMODE_NDELAY))
+ switch (sr_disk_status(&cd->cdi)) {
+ case CDS_NO_DISC:
+ case CDS_NO_INFO:
+ case CDS_AUDIO:
+ break;;
+ default: /* looks like data disc was detected */
+ mutex_lock(&sr_mutex);
+ ret = cdrom_open(&cd->cdi, bdev, mode);
+ mutex_unlock(&sr_mutex);
+ }
+
scsi_autopm_put_device(sdev);
if (ret)
scsi_cd_put(cd);