aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2010-09-26 07:16:56 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-20 23:06:14 -0400
commitd69f27186c16008540166c8017e9d4db2b477588 (patch)
tree5aad41d0b021e7544bf0aae30c44657e1afd3e45
parent96322b80e29802d2d3087987f6dc4e5aa19df64b (diff)
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@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--Documentation/video4linux/v4l2-framework.txt5
-rw-r--r--drivers/media/video/v4l2-dev.c4
2 files changed, 4 insertions, 5 deletions
diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
index 8fb9de4f4875..9b1d81c26b7d 100644
--- a/Documentation/video4linux/v4l2-framework.txt
+++ b/Documentation/video4linux/v4l2-framework.txt
@@ -551,9 +551,8 @@ from /dev).
551 551
552After video_unregister_device() returns no new opens can be done. However, 552After video_unregister_device() returns no new opens can be done. However,
553in the case of USB devices some application might still have one of these 553in the case of USB devices some application might still have one of these
554device nodes open. So after the unregister all file operations will return 554device nodes open. So after the unregister all file operations (except
555an error as well, except for the ioctl and unlocked_ioctl file operations: 555release, of course) will return an error as well.
556those will still be passed on since some buffer ioctls may still be needed.
557 556
558When the last user of the video device node exits, then the vdev->release() 557When the last user of the video device node exits, then the vdev->release()
559callback is called and you can do the final cleanup there. 558callback is called and you can do the final cleanup there.
diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c
index d4a353260c1e..f069c61cdf68 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, unsigned long arg)
221 struct video_device *vdev = video_devdata(filp); 221 struct video_device *vdev = video_devdata(filp);
222 int ret; 222 int ret;
223 223
224 /* Allow ioctl to continue even if the device was unregistered. 224 if (!vdev->fops->ioctl)
225 Things like dequeueing buffers might still be useful. */ 225 return -ENOTTY;
226 if (vdev->fops->unlocked_ioctl) { 226 if (vdev->fops->unlocked_ioctl) {
227 ret = vdev->fops->unlocked_ioctl(filp, cmd, arg); 227 ret = vdev->fops->unlocked_ioctl(filp, cmd, arg);
228 } else if (vdev->fops->ioctl) { 228 } else if (vdev->fops->ioctl) {