On Fri, 15 Oct 2010 10:45:45 +0200 Hans Verkuil <hverkuil@xxxxxxxxx> wrote: > On Thursday, October 14, 2010 22:06:29 Valdis.Kletnieks@xxxxxx wrote: > > On Wed, 13 Oct 2010 17:13:25 PDT, akpm@xxxxxxxxxxxxxxxxxxxx said: > > > The mm-of-the-moment snapshot 2010-10-13-17-13 has been uploaded to > > > > > > http://userweb.kernel.org/~akpm/mmotm/ > > > > This broke my webcam. I bisected it down to this commit, and things > > work again after reverting the 2 code lines of change. > > > > commit 9e4d79a98ebd857ec729f5fa8f432f35def4d0da > > Author: Hans Verkuil <hverkuil@xxxxxxxxx> > > Date: Sun Sep 26 08:16:56 2010 -0300 > > > > V4L/DVB: v4l2-dev: after a disconnect any ioctl call will be blocked > > > > Until now all fops except release and (unlocked_)ioctl returned an error > > after the device node was unregistered. Extend this as well to the ioctl > > fops. There is nothing useful that an application can do here and it > > complicates the driver code unnecessarily. > > > > Signed-off-by: Hans Verkuil <hverkuil@xxxxxxxxx> > > Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> > > > > > > diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c > > index d4a3532..f069c61 100644 > > --- a/drivers/media/video/v4l2-dev.c > > +++ b/drivers/media/video/v4l2-dev.c > > @@ -221,8 +221,8 @@ static long v4l2_ioctl(struct file *filp, unsigned int cmd, > > struct video_device *vdev = video_devdata(filp); > > int ret; > > > > - /* Allow ioctl to continue even if the device was unregistered. > > - Things like dequeueing buffers might still be useful. */ > > + if (!vdev->fops->ioctl) > > + return -ENOTTY; > > if (vdev->fops->unlocked_ioctl) { > > ret = vdev->fops->unlocked_ioctl(filp, cmd, arg); > > } else if (vdev->fops->ioctl) { > > > > I suspect this doesn't do what's intended if a driver is using ->unlocked_ioctl > > rather than ->ioctl, and it should be reverted - it only saves at most one > > if statement. > > > > > > I'm not sure what is going on here. It looks like this patch is mangled in your > tree since the same patch in the v4l-dvb repository looks like this: > > diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c > index 32575a6..26d39c4 100644 > --- a/drivers/media/video/v4l2-dev.c > +++ b/drivers/media/video/v4l2-dev.c > @@ -222,8 +222,8 @@ static int v4l2_ioctl(struct inode *inode, struct file *filp, > > if (!vdev->fops->ioctl) > return -ENOTTY; > - /* Allow ioctl to continue even if the device was unregistered. > - Things like dequeueing buffers might still be useful. */ > + if (!video_is_registered(vdev)) > + return -ENODEV; > return vdev->fops->ioctl(filp, cmd, arg); > } > > @@ -234,8 +234,8 @@ static long v4l2_unlocked_ioctl(struct file *filp, > > 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. */ > + if (!video_is_registered(vdev)) > + return -ENODEV; > return vdev->fops->unlocked_ioctl(filp, cmd, arg); > } > > In your diff there is a mismatch between ioctl and unlocked_ioctl which no doubt > is causing all the problems for you. The patch which Valdis quoted is what is in linux-next. I'm not at which stage the mangling happened? -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html