diff options
Diffstat (limited to 'fs/dlm')
-rw-r--r-- | fs/dlm/config.c | 8 | ||||
-rw-r--r-- | fs/dlm/plock.c | 2 | ||||
-rw-r--r-- | fs/dlm/user.c | 9 |
3 files changed, 13 insertions, 6 deletions
diff --git a/fs/dlm/config.c b/fs/dlm/config.c index eac23bd288b2..c4e7d721bd8d 100644 --- a/fs/dlm/config.c +++ b/fs/dlm/config.c | |||
@@ -438,7 +438,7 @@ static struct config_group *make_cluster(struct config_group *g, | |||
438 | kfree(gps); | 438 | kfree(gps); |
439 | kfree(sps); | 439 | kfree(sps); |
440 | kfree(cms); | 440 | kfree(cms); |
441 | return NULL; | 441 | return ERR_PTR(-ENOMEM); |
442 | } | 442 | } |
443 | 443 | ||
444 | static void drop_cluster(struct config_group *g, struct config_item *i) | 444 | static void drop_cluster(struct config_group *g, struct config_item *i) |
@@ -495,7 +495,7 @@ static struct config_group *make_space(struct config_group *g, const char *name) | |||
495 | kfree(sp); | 495 | kfree(sp); |
496 | kfree(gps); | 496 | kfree(gps); |
497 | kfree(nds); | 497 | kfree(nds); |
498 | return NULL; | 498 | return ERR_PTR(-ENOMEM); |
499 | } | 499 | } |
500 | 500 | ||
501 | static void drop_space(struct config_group *g, struct config_item *i) | 501 | static void drop_space(struct config_group *g, struct config_item *i) |
@@ -528,7 +528,7 @@ static struct config_item *make_comm(struct config_group *g, const char *name) | |||
528 | 528 | ||
529 | cm = kzalloc(sizeof(struct comm), GFP_KERNEL); | 529 | cm = kzalloc(sizeof(struct comm), GFP_KERNEL); |
530 | if (!cm) | 530 | if (!cm) |
531 | return NULL; | 531 | return ERR_PTR(-ENOMEM); |
532 | 532 | ||
533 | config_item_init_type_name(&cm->item, name, &comm_type); | 533 | config_item_init_type_name(&cm->item, name, &comm_type); |
534 | cm->nodeid = -1; | 534 | cm->nodeid = -1; |
@@ -561,7 +561,7 @@ static struct config_item *make_node(struct config_group *g, const char *name) | |||
561 | 561 | ||
562 | nd = kzalloc(sizeof(struct node), GFP_KERNEL); | 562 | nd = kzalloc(sizeof(struct node), GFP_KERNEL); |
563 | if (!nd) | 563 | if (!nd) |
564 | return NULL; | 564 | return ERR_PTR(-ENOMEM); |
565 | 565 | ||
566 | config_item_init_type_name(&nd->item, name, &node_type); | 566 | config_item_init_type_name(&nd->item, name, &node_type); |
567 | nd->nodeid = -1; | 567 | nd->nodeid = -1; |
diff --git a/fs/dlm/plock.c b/fs/dlm/plock.c index 78878c5781ca..eba87ff3177b 100644 --- a/fs/dlm/plock.c +++ b/fs/dlm/plock.c | |||
@@ -116,7 +116,7 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 number, struct file *file, | |||
116 | if (xop->callback == NULL) | 116 | if (xop->callback == NULL) |
117 | wait_event(recv_wq, (op->done != 0)); | 117 | wait_event(recv_wq, (op->done != 0)); |
118 | else { | 118 | else { |
119 | rv = -EINPROGRESS; | 119 | rv = FILE_LOCK_DEFERRED; |
120 | goto out; | 120 | goto out; |
121 | } | 121 | } |
122 | 122 | ||
diff --git a/fs/dlm/user.c b/fs/dlm/user.c index 1aa76b32d056..929e48ae7591 100644 --- a/fs/dlm/user.c +++ b/fs/dlm/user.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/poll.h> | 15 | #include <linux/poll.h> |
16 | #include <linux/signal.h> | 16 | #include <linux/signal.h> |
17 | #include <linux/spinlock.h> | 17 | #include <linux/spinlock.h> |
18 | #include <linux/smp_lock.h> | ||
18 | #include <linux/dlm.h> | 19 | #include <linux/dlm.h> |
19 | #include <linux/dlm_device.h> | 20 | #include <linux/dlm_device.h> |
20 | 21 | ||
@@ -618,13 +619,17 @@ static int device_open(struct inode *inode, struct file *file) | |||
618 | struct dlm_user_proc *proc; | 619 | struct dlm_user_proc *proc; |
619 | struct dlm_ls *ls; | 620 | struct dlm_ls *ls; |
620 | 621 | ||
622 | lock_kernel(); | ||
621 | ls = dlm_find_lockspace_device(iminor(inode)); | 623 | ls = dlm_find_lockspace_device(iminor(inode)); |
622 | if (!ls) | 624 | if (!ls) { |
625 | unlock_kernel(); | ||
623 | return -ENOENT; | 626 | return -ENOENT; |
627 | } | ||
624 | 628 | ||
625 | proc = kzalloc(sizeof(struct dlm_user_proc), GFP_KERNEL); | 629 | proc = kzalloc(sizeof(struct dlm_user_proc), GFP_KERNEL); |
626 | if (!proc) { | 630 | if (!proc) { |
627 | dlm_put_lockspace(ls); | 631 | dlm_put_lockspace(ls); |
632 | unlock_kernel(); | ||
628 | return -ENOMEM; | 633 | return -ENOMEM; |
629 | } | 634 | } |
630 | 635 | ||
@@ -636,6 +641,7 @@ static int device_open(struct inode *inode, struct file *file) | |||
636 | spin_lock_init(&proc->locks_spin); | 641 | spin_lock_init(&proc->locks_spin); |
637 | init_waitqueue_head(&proc->wait); | 642 | init_waitqueue_head(&proc->wait); |
638 | file->private_data = proc; | 643 | file->private_data = proc; |
644 | unlock_kernel(); | ||
639 | 645 | ||
640 | return 0; | 646 | return 0; |
641 | } | 647 | } |
@@ -870,6 +876,7 @@ static unsigned int device_poll(struct file *file, poll_table *wait) | |||
870 | 876 | ||
871 | static int ctl_device_open(struct inode *inode, struct file *file) | 877 | static int ctl_device_open(struct inode *inode, struct file *file) |
872 | { | 878 | { |
879 | cycle_kernel_lock(); | ||
873 | file->private_data = NULL; | 880 | file->private_data = NULL; |
874 | return 0; | 881 | return 0; |
875 | } | 882 | } |