diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1999-06-13 16:29:25 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1999-06-13 16:29:25 +0000 |
commit | db7d4daea91e105e3859cf461d7e53b9b77454b2 (patch) | |
tree | 9bb65b95440af09e8aca63abe56970dd3360cc57 /drivers/scsi/sr_ioctl.c | |
parent | 9c1c01ead627bdda9211c9abd5b758d6c687d8ac (diff) |
Merge with Linux 2.2.8.
Diffstat (limited to 'drivers/scsi/sr_ioctl.c')
-rw-r--r-- | drivers/scsi/sr_ioctl.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/scsi/sr_ioctl.c b/drivers/scsi/sr_ioctl.c index 2eaad47d8..b01ab7f1c 100644 --- a/drivers/scsi/sr_ioctl.c +++ b/drivers/scsi/sr_ioctl.c @@ -82,7 +82,8 @@ retry: switch(SCpnt->sense_buffer[2] & 0xf) { case UNIT_ATTENTION: scsi_CDs[target].device->changed = 1; - printk(KERN_INFO "sr%d: disc change detected.\n", target); + if (!quiet) + printk(KERN_INFO "sr%d: disc change detected.\n", target); if (retries++ < 10) goto retry; err = -ENOMEDIUM; @@ -105,12 +106,13 @@ retry: spin_unlock_irqrestore(&io_request_lock, flags); goto retry; } else { - /* 20 secs are enouth? */ + /* 20 secs are enough? */ err = -ENOMEDIUM; break; } } - printk(KERN_INFO "sr%d: CDROM not ready. Make sure there is a disc in the drive.\n",target); + if (!quiet) + printk(KERN_INFO "sr%d: CDROM not ready. Make sure there is a disc in the drive.\n",target); #ifdef DEBUG print_sense("sr", SCpnt); #endif @@ -120,9 +122,11 @@ retry: if (!quiet) printk(KERN_ERR "sr%d: CDROM (ioctl) reports ILLEGAL " "REQUEST.\n", target); - if (SCpnt->sense_buffer[12] == 0x20 && + if ((SCpnt->sense_buffer[12] == 0x20 || + SCpnt->sense_buffer[12] == 0x24) && SCpnt->sense_buffer[13] == 0x00) { /* sense: Invalid command operation code */ + /* or Invalid field in cdb */ err = -EDRIVE_CANT_DO_THIS; } else { err = -EINVAL; @@ -408,7 +412,7 @@ int sr_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, void* arg) spin_unlock_irqrestore(&io_request_lock, flags); if(!buffer) return -ENOMEM; - result = sr_do_ioctl(target, sr_cmd, buffer, 12, 0); + result = sr_do_ioctl(target, sr_cmd, buffer, 12, 1); tochdr->cdth_trk0 = buffer[2]; tochdr->cdth_trk1 = buffer[3]; @@ -872,6 +876,11 @@ int sr_dev_ioctl(struct cdrom_device_info *cdi, read_ahead[MAJOR(cdi->dev)] = arg; return 0; + case BLKSSZGET: + /* Block size of media */ + return put_user(blksize_size[MAJOR(cdi->dev)][MINOR(cdi->dev)], + (int *)arg); + RO_IOCTLS(cdi->dev,arg); case BLKFLSBUF: |