Blob Blame History Raw
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);