fbmem: cdev lock_kernel() pushdown

Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
Jonathan Corbet 2008-05-15 16:30:36 -06:00
parent 5794e1b14b
commit fc7f687a68

View file

@ -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;
} }