mousedev: BKL pushdown
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
dca67e9d3d
commit
f9c8154f36
@ -14,6 +14,7 @@
|
|||||||
#define MOUSEDEV_MIX 31
|
#define MOUSEDEV_MIX 31
|
||||||
|
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/smp_lock.h>
|
||||||
#include <linux/poll.h>
|
#include <linux/poll.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
@ -545,16 +546,21 @@ static int mousedev_open(struct inode *inode, struct file *file)
|
|||||||
if (i >= MOUSEDEV_MINORS)
|
if (i >= MOUSEDEV_MINORS)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
lock_kernel();
|
||||||
error = mutex_lock_interruptible(&mousedev_table_mutex);
|
error = mutex_lock_interruptible(&mousedev_table_mutex);
|
||||||
if (error)
|
if (error) {
|
||||||
|
unlock_kernel();
|
||||||
return error;
|
return error;
|
||||||
|
}
|
||||||
mousedev = mousedev_table[i];
|
mousedev = mousedev_table[i];
|
||||||
if (mousedev)
|
if (mousedev)
|
||||||
get_device(&mousedev->dev);
|
get_device(&mousedev->dev);
|
||||||
mutex_unlock(&mousedev_table_mutex);
|
mutex_unlock(&mousedev_table_mutex);
|
||||||
|
|
||||||
if (!mousedev)
|
if (!mousedev) {
|
||||||
|
unlock_kernel();
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
client = kzalloc(sizeof(struct mousedev_client), GFP_KERNEL);
|
client = kzalloc(sizeof(struct mousedev_client), GFP_KERNEL);
|
||||||
if (!client) {
|
if (!client) {
|
||||||
@ -573,6 +579,7 @@ static int mousedev_open(struct inode *inode, struct file *file)
|
|||||||
goto err_free_client;
|
goto err_free_client;
|
||||||
|
|
||||||
file->private_data = client;
|
file->private_data = client;
|
||||||
|
unlock_kernel();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_free_client:
|
err_free_client:
|
||||||
@ -580,6 +587,7 @@ static int mousedev_open(struct inode *inode, struct file *file)
|
|||||||
kfree(client);
|
kfree(client);
|
||||||
err_put_mousedev:
|
err_put_mousedev:
|
||||||
put_device(&mousedev->dev);
|
put_device(&mousedev->dev);
|
||||||
|
unlock_kernel();
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user