From: Jens Axboe <axboe@suse.de>

Update the ATAPI MO support code to reflect the reorganisations and cleanups
which the Mt Ranier support patch added.



 25-akpm/drivers/cdrom/cdrom.c |    9 ++++++---
 25-akpm/drivers/ide/ide-cd.c  |    7 +++----
 25-akpm/drivers/ide/ide-cd.h  |    2 +-
 3 files changed, 10 insertions(+), 8 deletions(-)

diff -puN drivers/cdrom/cdrom.c~atapi-mo-support-update drivers/cdrom/cdrom.c
--- 25/drivers/cdrom/cdrom.c~atapi-mo-support-update	Tue Dec 23 13:09:35 2003
+++ 25-akpm/drivers/cdrom/cdrom.c	Tue Dec 23 13:09:35 2003
@@ -708,6 +708,11 @@ static int cdrom_open_write(struct cdrom
 		ret = cdrom_mrw_open_write(cdi);
 	else if (CDROM_CAN(CDC_DVD_RAM))
 		ret = cdrom_dvdram_open_write(cdi);
+	/*
+	 * needs to really check whether media is writeable
+	 */
+	else if (CDROM_CAN(CDC_MO_DRIVE))
+		ret = 0;
 
 	return ret;
 }
@@ -737,7 +742,7 @@ int cdrom_open(struct cdrom_device_info 
 	cdi->use_count++;
 	ret = -EROFS;
 	if (fp->f_mode & FMODE_WRITE) {
-		if (!(CDROM_CAN(CDC_RAM) || CDROM_CAN(CDC_MO_DRIVE)))
+		if (!CDROM_CAN(CDC_RAM))
 			goto out;
 		if (cdrom_open_write(cdi))
 			goto out;
@@ -750,8 +755,6 @@ int cdrom_open(struct cdrom_device_info 
 	else
 		ret = open_for_data(cdi);
 
-	if (!ret) cdi->use_count++;
-
 	cdinfo(CD_OPEN, "Use count for \"/dev/%s\" now %d\n", cdi->name, cdi->use_count);
 	/* Do this on open.  Don't wait for mount, because they might
 	    not be mounting, but opening with O_NONBLOCK */
diff -puN drivers/ide/ide-cd.c~atapi-mo-support-update drivers/ide/ide-cd.c
--- 25/drivers/ide/ide-cd.c~atapi-mo-support-update	Tue Dec 23 13:09:35 2003
+++ 25-akpm/drivers/ide/ide-cd.c	Tue Dec 23 13:09:35 2003
@@ -790,7 +790,7 @@ static int cdrom_decode_status(ide_drive
 				 * devices will return this error while flushing
 				 * data from cache */
 				if (!rq->errors)
-					info->write_timeout = jiffies + ATAPI_WAIT_BUSY;
+					info->write_timeout = jiffies + ATAPI_WAIT_WRITE_BUSY;
 				rq->errors = 1;
 				if (time_after(jiffies, info->write_timeout))
 					do_end_request = 1;
@@ -2950,6 +2950,7 @@ int ide_cdrom_probe_capabilities (ide_dr
 
 	if (drive->media == ide_optical) {
 		CDROM_CONFIG_FLAGS(drive)->mo_drive = 1;
+		CDROM_CONFIG_FLAGS(drive)->ram = 1;
 		printk("%s: ATAPI magneto-optical drive\n", drive->name);
 		return nslots;
 	}
@@ -3281,9 +3282,7 @@ int ide_cdrom_setup (ide_drive_t *drive)
 	/*
 	 * set correct block size and read-only for non-ram media
 	 */
-	set_disk_ro(drive->disk,
-		!(CDROM_CONFIG_FLAGS(drive)->ram ||
-			CDROM_CONFIG_FLAGS(drive)->mo_drive));
+	set_disk_ro(drive->disk, !CDROM_CONFIG_FLAGS(drive)->ram);
 	blk_queue_hardsect_size(drive->queue, CD_FRAMESIZE);
 
 #if 0
diff -puN drivers/ide/ide-cd.h~atapi-mo-support-update drivers/ide/ide-cd.h
--- 25/drivers/ide/ide-cd.h~atapi-mo-support-update	Tue Dec 23 13:09:35 2003
+++ 25-akpm/drivers/ide/ide-cd.h	Tue Dec 23 13:09:35 2003
@@ -39,7 +39,7 @@
  * typical timeout for packet command
  */
 #define ATAPI_WAIT_PC		(60 * HZ)
-#define ATAPI_WAIT_BUSY		(5 * HZ)
+#define ATAPI_WAIT_WRITE_BUSY	(10 * HZ)
 
 /************************************************************************/
 

_