mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 2/3] SCSI core and sd: early detection of medium not present
@ 2006-06-06 15:31 Alan Stern
  2006-06-09  0:57 ` James Bottomley
  0 siblings, 1 reply; 5+ messages in thread
From: Alan Stern @ 2006-06-06 15:31 UTC (permalink / raw)
  To: Andrew Morton, Jens Axboe, James Bottomley
  Cc: Kernel development list, SCSI development list

This patch (as695) changes the scsi_test_unit_ready() routine in the SCSI 
core to set a new flag when no medium is present.  The sd driver is 
changed to use this new flag for reporting -ENOMEDIUM in from the 
sd_media_changed method.



Signed-off-by: Alan Stern <stern@rowland.harvard.edu>

---

Index: usb-2.6/drivers/scsi/sd.c
===================================================================
--- usb-2.6.orig/drivers/scsi/sd.c
+++ usb-2.6/drivers/scsi/sd.c
@@ -744,9 +744,8 @@ static int sd_media_changed(struct gendi
 	 * and we will figure it out later once the drive is
 	 * available again.
 	 */
-	if (retval)
+	if (retval || sdp->medium_not_present)
 		 goto not_present;
-
 	/*
 	 * For removable scsi disk we have to recognise the presence
 	 * of a disk in the drive. This is kept in the struct scsi_disk
@@ -761,7 +760,7 @@ static int sd_media_changed(struct gendi
 
 not_present:
 	set_media_not_present(sdkp);
-	return 1;
+	return -ENOMEDIUM;
 }
 
 static int sd_sync_cache(struct scsi_device *sdp)
Index: usb-2.6/include/scsi/scsi_device.h
===================================================================
--- usb-2.6.orig/include/scsi/scsi_device.h
+++ usb-2.6/include/scsi/scsi_device.h
@@ -92,6 +92,7 @@ struct scsi_device {
 	unsigned writeable:1;
 	unsigned removable:1;
 	unsigned changed:1;	/* Data invalid due to media change */
+	unsigned medium_not_present:1;	/* Set by scsi_test_unit_ready() */
 	unsigned busy:1;	/* Used to prevent races */
 	unsigned lockable:1;	/* Able to prevent media removal */
 	unsigned locked:1;      /* Media removal disabled */
Index: usb-2.6/drivers/scsi/scsi_lib.c
===================================================================
--- usb-2.6.orig/drivers/scsi/scsi_lib.c
+++ usb-2.6/drivers/scsi/scsi_lib.c
@@ -2026,6 +2026,7 @@ scsi_test_unit_ready(struct scsi_device 
 	result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, &sshdr,
 				  timeout, retries);
 
+	sdev->medium_not_present = 0;
 	if ((driver_byte(result) & DRIVER_SENSE) && sdev->removable) {
 
 		if ((scsi_sense_valid(&sshdr)) &&
@@ -2033,6 +2034,9 @@ scsi_test_unit_ready(struct scsi_device 
 		     (sshdr.sense_key == NOT_READY))) {
 			sdev->changed = 1;
 			result = 0;
+
+			if (sshdr.asc == 0x3A)
+				sdev->medium_not_present = 1;
 		}
 	}
 	return result;


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-06-09 14:54 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-06-06 15:31 [PATCH 2/3] SCSI core and sd: early detection of medium not present Alan Stern
2006-06-09  0:57 ` James Bottomley
2006-06-09 14:13   ` Alan Stern
2006-06-09 14:28     ` James Bottomley
2006-06-09 14:54       ` Alan Stern

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®