pktcdvd: Push BKL down into driver
PATCH 1/1 pktcdvd: Push BKL down into driver
Push the lock_kernel down into the driver and switch to unlocked_ioctl
Signed-off-by Alan Cox <[email protected]>
drivers/block/pktcdvd.c +24 -10
@@ -2796,9 +2796,14 @@ out_mem:return ret; } -static int pkt_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg) +static long pkt_ioctl (struct file *file,unsigned int cmd,unsigned long arg) { -struct pktcdvd_device *pd = inode->i_bdev->bd_disk->private_data; +struct inode *inode = file->f_path.dentry->d_inode; +struct pktcdvd_device *pd; +long ret; + +lock_kernel (); + pd = inode->i_bdev->bd_disk->private_data;VPRINTK ("pkt_ioctl: cmd %x, dev %d:%d\n" , cmd,imajor (inode),iminor (inode));
@@ -2811,7 +2816,8 @@ static int pkt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, ucase CDROM_LAST_WRITTEN :case CDROM_SEND_PACKET :case SCSI_IOCTL_SEND_COMMAND : -return blkdev_ioctl (pd->bdev->bd_inode, file, cmd, arg); + ret =blkdev_ioctl (pd->bdev->bd_inode, file, cmd, arg); +break ;case CDROMEJECT :/*
@@ -2820,14 +2826,15 @@ static int pkt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u*/ if (pd->refcnt ==1 )pkt_lock_door (pd,0 ); -return blkdev_ioctl (pd->bdev->bd_inode, file, cmd, arg); + ret =blkdev_ioctl (pd->bdev->bd_inode, file, cmd, arg); +break ;default :VPRINTK (DRIVER_NAME ": Unknown ioctl for %s (%x)\n" , pd->name, cmd); -return -ENOTTY ; + ret = -ENOTTY ; } - -return 0 ; +unlock_kernel (); +return ret; }static int pkt_media_changed (struct gendisk *disk)
@@ -2849,7 +2856,7 @@ static struct block_device_operations pktcdvd_ops = { .owner = THIS_MODULE, .open = pkt_open, .release = pkt_close, - .ioctl = pkt_ioctl, + .unlocked_ioctl = pkt_ioctl, .media_changed = pkt_media_changed, };
@@ -3014,7 +3021,8 @@ static void pkt_get_status(struct pkt_ctrl_command *ctrl_cmd)mutex_unlock (&ctl_mutex); } -static int pkt_ctl_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg) +static long pkt_ctl_ioctl (struct file *file,unsigned int cmd, +unsigned long arg) {void __user *argp = (void __user *)arg;struct pkt_ctrl_command ctrl_cmd;
@@ -3031,16 +3039,22 @@ static int pkt_ctl_ioctl(struct inode *inode, struct file *file, unsigned int cmcase PKT_CTRL_CMD_SETUP :if (!capable (CAP_SYS_ADMIN ))return -EPERM ; +lock_kernel (); ret =pkt_setup_dev (new_decode_dev (ctrl_cmd.dev), &pkt_dev); ctrl_cmd.pkt_dev =new_encode_dev (pkt_dev); +unlock_kernel ();break ;case PKT_CTRL_CMD_TEARDOWN :if (!capable (CAP_SYS_ADMIN ))return -EPERM ; +lock_kernel (); ret =pkt_remove_dev (new_decode_dev (ctrl_cmd.pkt_dev)); +unlock_kernel ();break ;case PKT_CTRL_CMD_STATUS : +lock_kernel ();pkt_get_status (&ctrl_cmd); +unlock_kernel ();break ;default :return -ENOTTY ;
@@ -3053,7 +3067,7 @@ static int pkt_ctl_ioctl(struct inode *inode, struct file *file, unsigned int cmstatic const struct file_operations pkt_ctl_fops = { - .ioctl = pkt_ctl_ioctl, + .unlocked_ioctl = pkt_ctl_ioctl, .owner =THIS_MODULE , };