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 | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index a8f630213a1a..cd1cd466addb 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -529,6 +529,16 @@ static int sr_block_open(struct block_device *bdev, fmode_t mode)
 	cd = scsi_cd_get(bdev->bd_disk);
 	if (cd) {
 		ret = cdrom_open(&cd->cdi, bdev, mode);
+		/* 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 */
+					ret = cdrom_open(&cd->cdi, bdev, mode);
+			}
 		if (ret)
 			scsi_cd_put(cd);
 	}
-- 
2.13.6