
From: Stefan Meyknecht <sm0407@nurfuerspam.de>

In function cdrom_open_write CDC_RAM is initially set.  The function
cdrom_is_random_writable sets ram_write to 0 and therefore CDC_RAM gets masked
out later.  cdrom_is_random_writable calls cdrom_get_random_writable and there
cdi->ops->generic_packet returns -5 (-EIO?).

Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/cdrom/cdrom.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff -puN drivers/cdrom/cdrom.c~cdrom-mo-drive-open-write-fix drivers/cdrom/cdrom.c
--- 25/drivers/cdrom/cdrom.c~cdrom-mo-drive-open-write-fix	2004-08-08 23:34:53.213168352 -0700
+++ 25-akpm/drivers/cdrom/cdrom.c	2004-08-08 23:34:53.234165160 -0700
@@ -871,7 +871,10 @@ static int cdrom_open_write(struct cdrom
 	if (!cdrom_is_mrw(cdi, &mrw_write))
 		mrw = 1;
 
-	(void) cdrom_is_random_writable(cdi, &ram_write);
+	if (CDROM_CAN(CDC_MO_DRIVE))
+		ram_write = 1;
+	else
+		(void) cdrom_is_random_writable(cdi, &ram_write);
 
 	if (mrw)
 		cdi->mask &= ~CDC_MRW;
@@ -893,7 +896,7 @@ static int cdrom_open_write(struct cdrom
 	else if (CDROM_CAN(CDC_DVD_RAM))
 		ret = cdrom_dvdram_open_write(cdi);
  	else if (CDROM_CAN(CDC_RAM) &&
- 		 !CDROM_CAN(CDC_CD_R|CDC_CD_RW|CDC_DVD|CDC_DVD_R|CDC_MRW))
+ 		 !CDROM_CAN(CDC_CD_R|CDC_CD_RW|CDC_DVD|CDC_DVD_R|CDC_MRW|CDC_MO_DRIVE))
  		ret = cdrom_ram_open_write(cdi);
 	else if (CDROM_CAN(CDC_MO_DRIVE))
 		ret = mo_open_write(cdi);
_
