--- linux-2.6.12/drivers/scsi/sd.c	2005-06-18 07:48:29.000000000 +1200
+++ linux-2.6.12-jrt1/drivers/scsi/sd.c	2005-07-06 14:33:27.000000000 +1200
@@ -89,6 +89,10 @@
 #define SD_MAX_RETRIES		5
 #define SD_PASSTHROUGH_RETRIES	1
 
+static unsigned int delay_use = 0;
+module_param(delay_use, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(delay_use, "Optional number of seconds delay for dodgy USB keys to settle");
+
 static void scsi_disk_release(struct kref *kref);
 
 struct scsi_disk {
@@ -1483,6 +1487,14 @@ static int sd_revalidate_disk(struct gen
 	sdkp->WCE = 0;
 	sdkp->RCD = 0;
 
+	/* Wait for the timeout to expire */
+	if (delay_use > 0) {
+		printk(KERN_DEBUG "sd: waiting for device to get ready.\n");
+		wait_queue_head_t delay_wait;
+		init_waitqueue_head(&delay_wait);
+		wait_event_interruptible_timeout(delay_wait, 0, delay_use * HZ);
+	}
+	
 	sd_spinup_disk(sdkp, disk->disk_name, sreq, buffer);
 
 	/*
