From: Stefan Meyknecht 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 Signed-off-by: Andrew Morton --- 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); _