[PATCH] kill cdrom ->dev_ioctl method
Since early 2.4.x all cdrom drivers implement the block_device methods themselves, so they can handle additional ioctls directly instead of going through the cdrom layer. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Jens Axboe <axboe@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
d2c5d4fc07
commit
6a2900b676
@ -71,7 +71,7 @@ MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_CDROM_MAJOR);
|
||||
#define SR_CAPABILITIES \
|
||||
(CDC_CLOSE_TRAY|CDC_OPEN_TRAY|CDC_LOCK|CDC_SELECT_SPEED| \
|
||||
CDC_SELECT_DISC|CDC_MULTI_SESSION|CDC_MCN|CDC_MEDIA_CHANGED| \
|
||||
CDC_PLAY_AUDIO|CDC_RESET|CDC_IOCTLS|CDC_DRIVE_STATUS| \
|
||||
CDC_PLAY_AUDIO|CDC_RESET|CDC_DRIVE_STATUS| \
|
||||
CDC_CD_R|CDC_CD_RW|CDC_DVD|CDC_DVD_R|CDC_DVD_RAM|CDC_GENERIC_PACKET| \
|
||||
CDC_MRW|CDC_MRW_W|CDC_RAM)
|
||||
|
||||
@ -118,7 +118,6 @@ static struct cdrom_device_ops sr_dops = {
|
||||
.get_mcn = sr_get_mcn,
|
||||
.reset = sr_reset,
|
||||
.audio_ioctl = sr_audio_ioctl,
|
||||
.dev_ioctl = sr_dev_ioctl,
|
||||
.capability = SR_CAPABILITIES,
|
||||
.generic_packet = sr_packet,
|
||||
};
|
||||
@ -456,17 +455,33 @@ static int sr_block_ioctl(struct inode *inode, struct file *file, unsigned cmd,
|
||||
{
|
||||
struct scsi_cd *cd = scsi_cd(inode->i_bdev->bd_disk);
|
||||
struct scsi_device *sdev = cd->device;
|
||||
void __user *argp = (void __user *)arg;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Send SCSI addressing ioctls directly to mid level, send other
|
||||
* ioctls to cdrom/block level.
|
||||
*/
|
||||
switch (cmd) {
|
||||
case SCSI_IOCTL_GET_IDLUN:
|
||||
case SCSI_IOCTL_GET_BUS_NUMBER:
|
||||
return scsi_ioctl(sdev, cmd, (void __user *)arg);
|
||||
/*
|
||||
* Send SCSI addressing ioctls directly to mid level, send other
|
||||
* ioctls to cdrom/block level.
|
||||
*/
|
||||
switch (cmd) {
|
||||
case SCSI_IOCTL_GET_IDLUN:
|
||||
case SCSI_IOCTL_GET_BUS_NUMBER:
|
||||
return scsi_ioctl(sdev, cmd, argp);
|
||||
}
|
||||
return cdrom_ioctl(file, &cd->cdi, inode, cmd, arg);
|
||||
|
||||
ret = cdrom_ioctl(file, &cd->cdi, inode, cmd, arg);
|
||||
if (ret != ENOSYS)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* ENODEV means that we didn't recognise the ioctl, or that we
|
||||
* cannot execute it in the current device state. In either
|
||||
* case fall through to scsi_ioctl, which will return ENDOEV again
|
||||
* if it doesn't recognise the ioctl
|
||||
*/
|
||||
ret = scsi_nonblockable_ioctl(sdev, cmd, argp, NULL);
|
||||
if (ret != -ENODEV)
|
||||
return ret;
|
||||
return scsi_ioctl(sdev, cmd, argp);
|
||||
}
|
||||
|
||||
static int sr_block_media_changed(struct gendisk *disk)
|
||||
|
Reference in New Issue
Block a user