diff --git a/drivers/staging/easycap/easycap.h b/drivers/staging/easycap/easycap.h index ad836d2d26fe..f3c827eb0abe 100644 --- a/drivers/staging/easycap/easycap.h +++ b/drivers/staging/easycap/easycap.h @@ -463,15 +463,12 @@ struct data_buffer audio_buffer[]; void easycap_complete(struct urb *); int easycap_open(struct inode *, struct file *); int easycap_release(struct inode *, struct file *); -int easycap_ioctl(struct inode *, struct file *, \ - unsigned int, unsigned long); +long easycap_ioctl(struct file *, unsigned int, unsigned long); /*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/ #if defined(EASYCAP_IS_VIDEODEV_CLIENT) int easycap_open_noinode(struct file *); int easycap_release_noinode(struct file *); -long easycap_ioctl_noinode(struct file *, \ - unsigned int, unsigned long); int videodev_release(struct video_device *); #endif /*EASYCAP_IS_VIDEODEV_CLIENT*/ /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ @@ -515,8 +512,7 @@ void easysnd_complete(struct urb *); ssize_t easysnd_read(struct file *, char __user *, size_t, loff_t *); int easysnd_open(struct inode *, struct file *); int easysnd_release(struct inode *, struct file *); -int easysnd_ioctl(struct inode *, struct file *, \ - unsigned int, unsigned long); +long easysnd_ioctl(struct file *, unsigned int, unsigned long); unsigned int easysnd_poll(struct file *, poll_table *); void easysnd_delete(struct kref *); int submit_audio_urbs(struct easycap *); diff --git a/drivers/staging/easycap/easycap_ioctl.c b/drivers/staging/easycap/easycap_ioctl.c index 276b63dfe27e..9a42ae02cd5d 100644 --- a/drivers/staging/easycap/easycap_ioctl.c +++ b/drivers/staging/easycap/easycap_ioctl.c @@ -25,6 +25,7 @@ */ /*****************************************************************************/ +#include #include "easycap.h" #include "easycap_debug.h" #include "easycap_standard.h" @@ -773,19 +774,10 @@ while (0xFFFFFFFF != easycap_control[i1].id) { SAY("WARNING: failed to adjust mute: control not found\n"); return -ENOENT; } -/****************************************************************************/ -/*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/ -#if defined(EASYCAP_IS_VIDEODEV_CLIENT) -long -easycap_ioctl_noinode(struct file *file, unsigned int cmd, unsigned long arg)\ - { - return easycap_ioctl((struct inode *)NULL, file, cmd, arg); -} -#endif /*EASYCAP_IS_VIDEODEV_CLIENT*/ -/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ + /*--------------------------------------------------------------------------*/ -int easycap_ioctl(struct inode *inode, struct file *file, \ - unsigned int cmd, unsigned long arg) +static int easycap_ioctl_bkl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) { static struct easycap *peasycap; static struct usb_device *p; @@ -1956,19 +1948,22 @@ default: { } return 0; } -/****************************************************************************/ -/*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/ -#if defined(EASYCAP_IS_VIDEODEV_CLIENT) -long -easysnd_ioctl_noinode(struct file *file, unsigned int cmd, unsigned long arg) + +long easycap_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { - return easysnd_ioctl((struct inode *)NULL, file, cmd, arg); + struct inode *inode = file->f_dentry->d_inode; + long ret; + + lock_kernel(); + ret = easycap_ioctl_bkl(inode, file, cmd, arg); + unlock_kernel(); + + return ret; } -#endif /*EASYCAP_IS_VIDEODEV_CLIENT*/ -/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ + /*--------------------------------------------------------------------------*/ -int easysnd_ioctl(struct inode *inode, struct file *file, \ - unsigned int cmd, unsigned long arg) +static int easysnd_ioctl_bkl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) { struct easycap *peasycap; struct usb_device *p; @@ -2158,6 +2153,19 @@ default: { } return 0; } + +long easysnd_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + struct inode *inode = file->f_dentry->d_inode; + long ret; + + lock_kernel(); + ret = easysnd_ioctl_bkl(inode, file, cmd, arg); + unlock_kernel(); + + return ret; +} + /*****************************************************************************/ int explain_ioctl(__u32 wot) { diff --git a/drivers/staging/easycap/easycap_main.c b/drivers/staging/easycap/easycap_main.c index 09c194ce10a3..5a4bbd9b453f 100644 --- a/drivers/staging/easycap/easycap_main.c +++ b/drivers/staging/easycap/easycap_main.c @@ -60,13 +60,13 @@ struct usb_driver easycap_usb_driver = { */ /*---------------------------------------------------------------------------*/ const struct file_operations easycap_fops = { -.owner = THIS_MODULE, -.open = easycap_open, -.release = easycap_release, -.ioctl = easycap_ioctl, -.poll = easycap_poll, -.mmap = easycap_mmap, -.llseek = no_llseek, + .owner = THIS_MODULE, + .open = easycap_open, + .release = easycap_release, + .unlocked_ioctl = easycap_ioctl, + .poll = easycap_poll, + .mmap = easycap_mmap, + .llseek = no_llseek, }; struct vm_operations_struct easycap_vm_ops = { .open = easycap_vma_open, @@ -83,12 +83,12 @@ struct usb_class_driver easycap_class = { #if defined(EASYCAP_IS_VIDEODEV_CLIENT) #if defined(EASYCAP_NEEDS_V4L2_FOPS) const struct v4l2_file_operations v4l2_fops = { -.owner = THIS_MODULE, -.open = easycap_open_noinode, -.release = easycap_release_noinode, -.ioctl = easycap_ioctl_noinode, -.poll = easycap_poll, -.mmap = easycap_mmap, + .owner = THIS_MODULE, + .open = easycap_open_noinode, + .release = easycap_release_noinode, + .unlocked_ioctl = easycap_ioctl, + .poll = easycap_poll, + .mmap = easycap_mmap, }; #endif /*EASYCAP_NEEDS_V4L2_FOPS*/ int video_device_many /*=0*/; @@ -102,12 +102,12 @@ struct video_device *pvideo_array[VIDEO_DEVICE_MANY], *pvideo_device; */ /*--------------------------------------------------------------------------*/ const struct file_operations easysnd_fops = { -.owner = THIS_MODULE, -.open = easysnd_open, -.release = easysnd_release, -.ioctl = easysnd_ioctl, -.read = easysnd_read, -.llseek = no_llseek, + .owner = THIS_MODULE, + .open = easysnd_open, + .release = easysnd_release, + .unlocked_ioctl = easysnd_ioctl, + .read = easysnd_read, + .llseek = no_llseek, }; struct usb_class_driver easysnd_class = { .name = "usb/easysnd%d",