fbmem: cdev lock_kernel() pushdown
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
parent
5794e1b14b
commit
fc7f687a68
1 changed files with 11 additions and 4 deletions
|
@ -1326,20 +1326,27 @@ fb_open(struct inode *inode, struct file *file)
|
||||||
|
|
||||||
if (fbidx >= FB_MAX)
|
if (fbidx >= FB_MAX)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
lock_kernel();
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_KMOD
|
||||||
if (!(info = registered_fb[fbidx]))
|
if (!(info = registered_fb[fbidx]))
|
||||||
try_to_load(fbidx);
|
try_to_load(fbidx);
|
||||||
#endif /* CONFIG_KMOD */
|
#endif /* CONFIG_KMOD */
|
||||||
if (!(info = registered_fb[fbidx]))
|
if (!(info = registered_fb[fbidx])) {
|
||||||
return -ENODEV;
|
res = -ENODEV;
|
||||||
if (!try_module_get(info->fbops->owner))
|
goto out;
|
||||||
return -ENODEV;
|
}
|
||||||
|
if (!try_module_get(info->fbops->owner)) {
|
||||||
|
res = -ENODEV;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
file->private_data = info;
|
file->private_data = info;
|
||||||
if (info->fbops->fb_open) {
|
if (info->fbops->fb_open) {
|
||||||
res = info->fbops->fb_open(info,1);
|
res = info->fbops->fb_open(info,1);
|
||||||
if (res)
|
if (res)
|
||||||
module_put(info->fbops->owner);
|
module_put(info->fbops->owner);
|
||||||
}
|
}
|
||||||
|
out:
|
||||||
|
unlock_kernel();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue