compat_ioctl: block: handle cdrom compat ioctl in non-cdrom drivers
Various block drivers implement the CDROMMULTISESSION, CDROM_GET_CAPABILITY, and CDROMEJECT ioctl commands, relying on the block layer to handle compat_ioctl mode for them. Move this into the drivers directly as a preparation for simplifying the block layer later. When only integer arguments or no arguments are passed, the same handler can be used for .ioctl and .compat_ioctl, and when only pointer arguments are passed, the newly added blkdev_compat_ptr_ioctl can be used. Reviewed-by: Ben Hutchings <ben.hutchings@codethink.co.uk> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
ab8bc5417d
commit
9452b1a3ed
|
@ -3879,6 +3879,9 @@ static int fd_compat_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
|
||||||
{
|
{
|
||||||
int drive = (long)bdev->bd_disk->private_data;
|
int drive = (long)bdev->bd_disk->private_data;
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
case CDROMEJECT: /* CD-ROM eject */
|
||||||
|
case 0x6470: /* SunOS floppy eject */
|
||||||
|
|
||||||
case FDMSGON:
|
case FDMSGON:
|
||||||
case FDMSGOFF:
|
case FDMSGOFF:
|
||||||
case FDSETEMSGTRESH:
|
case FDSETEMSGTRESH:
|
||||||
|
|
|
@ -874,6 +874,7 @@ static const struct block_device_operations pd_fops = {
|
||||||
.open = pd_open,
|
.open = pd_open,
|
||||||
.release = pd_release,
|
.release = pd_release,
|
||||||
.ioctl = pd_ioctl,
|
.ioctl = pd_ioctl,
|
||||||
|
.compat_ioctl = pd_ioctl,
|
||||||
.getgeo = pd_getgeo,
|
.getgeo = pd_getgeo,
|
||||||
.check_events = pd_check_events,
|
.check_events = pd_check_events,
|
||||||
.revalidate_disk= pd_revalidate
|
.revalidate_disk= pd_revalidate
|
||||||
|
|
|
@ -276,6 +276,7 @@ static const struct block_device_operations pf_fops = {
|
||||||
.open = pf_open,
|
.open = pf_open,
|
||||||
.release = pf_release,
|
.release = pf_release,
|
||||||
.ioctl = pf_ioctl,
|
.ioctl = pf_ioctl,
|
||||||
|
.compat_ioctl = pf_ioctl,
|
||||||
.getgeo = pf_getgeo,
|
.getgeo = pf_getgeo,
|
||||||
.check_events = pf_check_events,
|
.check_events = pf_check_events,
|
||||||
};
|
};
|
||||||
|
|
|
@ -171,6 +171,7 @@ static const struct block_device_operations vdc_fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.getgeo = vdc_getgeo,
|
.getgeo = vdc_getgeo,
|
||||||
.ioctl = vdc_ioctl,
|
.ioctl = vdc_ioctl,
|
||||||
|
.compat_ioctl = blkdev_compat_ptr_ioctl,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void vdc_blk_queue_start(struct vdc_port *port)
|
static void vdc_blk_queue_start(struct vdc_port *port)
|
||||||
|
|
|
@ -2632,6 +2632,7 @@ static const struct block_device_operations xlvbd_block_fops =
|
||||||
.release = blkif_release,
|
.release = blkif_release,
|
||||||
.getgeo = blkif_getgeo,
|
.getgeo = blkif_getgeo,
|
||||||
.ioctl = blkif_ioctl,
|
.ioctl = blkif_ioctl,
|
||||||
|
.compat_ioctl = blkdev_compat_ptr_ioctl,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue