--- linux-2.6.1-rc1/drivers/cdrom/cdrom.c~ 2004-01-05 11:10:12.959452528 +0100 +++ linux-2.6.1-rc1/drivers/cdrom/cdrom.c 2004-01-05 11:15:10.536213984 +0100 @@ -740,23 +740,24 @@ cdinfo(CD_OPEN, "entering cdrom_open\n"); cdi->use_count++; - ret = -EROFS; - if (fp->f_mode & FMODE_WRITE) { - printk("cdrom: %s opening for WRITE\n", current->comm); - if (!CDROM_CAN(CDC_RAM)) { - printk("bzzt\n"); - goto out; - } - if (cdrom_open_write(cdi)) - goto out; - } /* if this was a O_NONBLOCK open and we should honor the flags, * do a quick open without drive/disc integrity checks. */ if ((fp->f_flags & O_NONBLOCK) && (cdi->options & CDO_USE_FFLAGS)) ret = cdi->ops->open(cdi, 1); - else + else { + if (fp->f_mode & FMODE_WRITE) { + ret = -EROFS; + printk("cdrom: %s opening for WRITE\n", current->comm); + if (!CDROM_CAN(CDC_RAM)) { + printk("bzzt\n"); + goto out; + } + if (cdrom_open_write(cdi)) + goto out; + } ret = open_for_data(cdi); + } 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