diff options
author | Arnd Bergmann <arnd@arndb.de> | 2008-05-20 19:15:48 +0200 |
---|---|---|
committer | Jonathan Corbet <corbet@lwn.net> | 2008-06-20 14:05:56 -0600 |
commit | 514bcc66d4072a221a8dfd341a4006385a441918 (patch) | |
tree | 5d2252cf2b6bd5345dd3671873785680c1b61b4c /fs/dlm | |
parent | 009228dfb641ca7e4315ab0d0d55465747331025 (diff) | |
download | op-kernel-dev-514bcc66d4072a221a8dfd341a4006385a441918.zip op-kernel-dev-514bcc66d4072a221a8dfd341a4006385a441918.tar.gz |
dlm-user: BKL pushdown
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'fs/dlm')
-rw-r--r-- | fs/dlm/user.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/dlm/user.c b/fs/dlm/user.c index ebbcf38..f976f30 100644 --- a/fs/dlm/user.c +++ b/fs/dlm/user.c @@ -15,6 +15,7 @@ #include <linux/poll.h> #include <linux/signal.h> #include <linux/spinlock.h> +#include <linux/smp_lock.h> #include <linux/dlm.h> #include <linux/dlm_device.h> @@ -618,13 +619,17 @@ static int device_open(struct inode *inode, struct file *file) struct dlm_user_proc *proc; struct dlm_ls *ls; + lock_kernel(); ls = dlm_find_lockspace_device(iminor(inode)); - if (!ls) + if (!ls) { + unlock_kernel(); return -ENOENT; + } proc = kzalloc(sizeof(struct dlm_user_proc), GFP_KERNEL); if (!proc) { dlm_put_lockspace(ls); + unlock_kernel(); return -ENOMEM; } @@ -636,6 +641,7 @@ static int device_open(struct inode *inode, struct file *file) spin_lock_init(&proc->locks_spin); init_waitqueue_head(&proc->wait); file->private_data = proc; + unlock_kernel(); return 0; } @@ -870,6 +876,7 @@ static unsigned int device_poll(struct file *file, poll_table *wait) static int ctl_device_open(struct inode *inode, struct file *file) { + cycle_kernel_lock(); file->private_data = NULL; return 0; } |