diff options
Diffstat (limited to 'drivers/media/video/v4l2-dev.c')
| -rw-r--r-- | drivers/media/video/v4l2-dev.c | 11 | 
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c index 06f14008b34..a5c9ed128b9 100644 --- a/drivers/media/video/v4l2-dev.c +++ b/drivers/media/video/v4l2-dev.c @@ -173,6 +173,17 @@ static void v4l2_device_release(struct device *cd)  		media_device_unregister_entity(&vdev->entity);  #endif +	/* Do not call v4l2_device_put if there is no release callback set. +	 * Drivers that have no v4l2_device release callback might free the +	 * v4l2_dev instance in the video_device release callback below, so we +	 * must perform this check here. +	 * +	 * TODO: In the long run all drivers that use v4l2_device should use the +	 * v4l2_device release callback. This check will then be unnecessary. +	 */ +	if (v4l2_dev && v4l2_dev->release == NULL) +		v4l2_dev = NULL; +  	/* Release video_device and perform other  	   cleanups as needed. */  	vdev->release(vdev);  |