V4L/DVB (4367): Videodev: Handle class_device related errors
Add proper error checking and roll-back for failure of class_device_create_file() in videodev.c. Print error messages and unroll partially created sysfs entries. Also, failure of class_device_register() in video_register_device() is handled correctly. It was failing to de-allocate the minor number. This must be done in video_register_device(), since the caller has no way of knowing if failure occurred before or after the class device was registered. Also added an error message if video_register_device() is called with an unknown type, which should never happen. Signed-off-by: Trent Piepho <xyzzy@speakeasy.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
Родитель
df2732706c
Коммит
53dd8def52
|
@ -1538,6 +1538,8 @@ int video_register_device(struct video_device *vfd, int type, int nr)
|
|||
name_base = "radio";
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "%s called with unknown type: %d\n",
|
||||
__FUNCTION__, type);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1592,6 +1594,15 @@ int video_register_device(struct video_device *vfd, int type, int nr)
|
|||
"http://lwn.net/Articles/36850/\n", vfd->name);
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
fail_classdev:
|
||||
class_device_unregister(&vfd->class_dev);
|
||||
fail_minor:
|
||||
mutex_lock(&videodev_lock);
|
||||
video_device[vfd->minor] = NULL;
|
||||
vfd->minor = -1;
|
||||
mutex_unlock(&videodev_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Загрузка…
Ссылка в новой задаче