Commit 9452b1a3 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

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: default avatarBen Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent ab8bc541
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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;
	switch (cmd) {
	case CDROMEJECT: /* CD-ROM eject */
	case 0x6470:	 /* SunOS floppy eject */

	case FDMSGON:
	case FDMSGOFF:
	case FDSETEMSGTRESH:
+1 −0
Original line number Diff line number Diff line
@@ -874,6 +874,7 @@ static const struct block_device_operations pd_fops = {
	.open		= pd_open,
	.release	= pd_release,
	.ioctl		= pd_ioctl,
	.compat_ioctl	= pd_ioctl,
	.getgeo		= pd_getgeo,
	.check_events	= pd_check_events,
	.revalidate_disk= pd_revalidate
+1 −0
Original line number Diff line number Diff line
@@ -276,6 +276,7 @@ static const struct block_device_operations pf_fops = {
	.open		= pf_open,
	.release	= pf_release,
	.ioctl		= pf_ioctl,
	.compat_ioctl	= pf_ioctl,
	.getgeo		= pf_getgeo,
	.check_events	= pf_check_events,
};
+1 −0
Original line number Diff line number Diff line
@@ -171,6 +171,7 @@ static const struct block_device_operations vdc_fops = {
	.owner		= THIS_MODULE,
	.getgeo		= vdc_getgeo,
	.ioctl		= vdc_ioctl,
	.compat_ioctl	= blkdev_compat_ptr_ioctl,
};

static void vdc_blk_queue_start(struct vdc_port *port)
+1 −0
Original line number Diff line number Diff line
@@ -2632,6 +2632,7 @@ static const struct block_device_operations xlvbd_block_fops =
	.release = blkif_release,
	.getgeo = blkif_getgeo,
	.ioctl = blkif_ioctl,
	.compat_ioctl = blkdev_compat_ptr_ioctl,
};