--- 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); /*