Re: [PATCH 10/10] bkl: Fix-up compile problems as a result of the bkl-pushdown.

John Kacur
2010-04-27T11:54:45Z

[-- Attachment #1: Type: TEXT/PLAIN, Size: 2859 bytes --]

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 <jkacur@redhat.com>
> > ---
> > 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