On Tue, 27 Apr 2010, Arnd Bergmann wrote: > On Tuesday 27 April 2010, John Kacur wrote: > > Fix-up compile problems as a result of the bkl-pushdown. > > In particular, the v4l2_ioctl should call an unlocked_ioctl > > > > Signed-off-by: John Kacur > > --- > > drivers/media/video/v4l2-dev.c | 4 ++-- > > 1 files changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c > > index 3606694..8fbfa61 100644 > > --- a/drivers/media/video/v4l2-dev.c > > +++ b/drivers/media/video/v4l2-dev.c > > @@ -222,12 +222,12 @@ static long v4l2_ioctl(struct file *filp, > > struct video_device *vdev = video_devdata(filp); > > int ret; > > > > - if (!vdev->fops->ioctl) > > + if (!vdev->fops->unlocked_ioctl) > > return -ENOTTY; > > /* Allow ioctl to continue even if the device was unregistered. > > Things like dequeueing buffers might still be useful. */ > > lock_kernel(); > > - ret = vdev->fops->ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); > > + ret = vdev->fops->unlocked_ioctl(filp, cmd, arg); > > unlock_kernel(); > > > > return ret; > > No, this is what I thought as well, at first, but the version I posted is > actually correct. > > vdev->fops is not struct file_operations but struct v4l2_file_operations, > and the v4l2_ioctl function is used only when fops->ioctl is set, see > __video_register_device. > > The v4l2 ioctl stuff probably can use a lot of cleanup itself, but so > far I think we're not making it worse with my patch. > Hi Arnd Well it is certainly possible that my fixup is not correct too - your patch cannot be correct, because it doesn't compile! Here is what I get when I apply your patch to a recent linus/master make O=/bld/arnd/ drivers/media/video/v4l2-dev.o -----CUT A BUNCH OF STUFF OUT --- CC drivers/media/video/v4l2-dev.o /home/jkacur/jk-2.6/drivers/media/video/v4l2-dev.c: In function ˇv4l2_ioctl˘: /home/jkacur/jk-2.6/drivers/media/video/v4l2-dev.c:230: warning: passing argument 1 of ˇvdev->fops->ioctl˘ from incompatible pointer type /home/jkacur/jk-2.6/drivers/media/video/v4l2-dev.c:230: note: expected ˇstruct file *˘ but argument is of type ˇstruct inode *˘ /home/jkacur/jk-2.6/drivers/media/video/v4l2-dev.c:230: warning: passing argument 2 of ˇvdev->fops->ioctl˘ makes integer from pointer without a cast /home/jkacur/jk-2.6/drivers/media/video/v4l2-dev.c:230: note: expected ˇunsigned int˘ but argument is of type ˇstruct file *˘ /home/jkacur/jk-2.6/drivers/media/video/v4l2-dev.c:230: error: too many arguments to function ˇvdev->fops->ioctl˘ make[2]: *** [drivers/media/video/v4l2-dev.o] Error 1 make[1]: *** [drivers/media/video/v4l2-dev.o] Error 2 make: *** [sub-make] Error 2 Thanks