diff -urpN --exclude-from=/home/davej/.exclude bk-linus/drivers/cdrom/cdrom.c linux-2.5/drivers/cdrom/cdrom.c
--- bk-linus/drivers/cdrom/cdrom.c	2002-11-21 02:13:46.000000000 +0000
+++ linux-2.5/drivers/cdrom/cdrom.c	2002-11-21 17:57:34.000000000 +0000
@@ -727,6 +727,7 @@ static int cdrom_load_unload(struct cdro
 	cgc.cmd[0] = GPCMD_LOAD_UNLOAD;
 	cgc.cmd[4] = 2 + (slot >= 0);
 	cgc.cmd[8] = slot;
+	cgc.timeout = 60 * HZ;
 
 	/* The Sanyo 3 CD changer uses byte 7 of the 
 	GPCMD_TEST_UNIT_READY to command to switch CDs instead of
@@ -1901,6 +1902,7 @@ static int mmc_ioctl(struct cdrom_device
 {		
 	struct cdrom_device_ops *cdo = cdi->ops;
 	struct cdrom_generic_command cgc;
+	struct request_sense sense;
 	char buffer[32];
 	int ret = 0;
 
@@ -1935,9 +1937,11 @@ static int mmc_ioctl(struct cdrom_device
 		cgc.buffer = (char *) kmalloc(blocksize, GFP_KERNEL);
 		if (cgc.buffer == NULL)
 			return -ENOMEM;
+		memset(&sense, 0, sizeof(sense));
+		cgc.sense = &sense;
 		cgc.data_direction = CGC_DATA_READ;
 		ret = cdrom_read_block(cdi, &cgc, lba, 1, format, blocksize);
-		if (ret) {
+		if (ret && sense.sense_key==0x05 && sense.asc==0x20 && sense.ascq==0x00) {
 			/*
 			 * SCSI-II devices are not required to support
 			 * READ_CD, so let's try switching block size