diff options
Diffstat (limited to 'fs/ocfs2/cluster/nodemanager.c')
-rw-r--r-- | fs/ocfs2/cluster/nodemanager.c | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/fs/ocfs2/cluster/nodemanager.c b/fs/ocfs2/cluster/nodemanager.c index cfdb08b484ed..b364b7052e46 100644 --- a/fs/ocfs2/cluster/nodemanager.c +++ b/fs/ocfs2/cluster/nodemanager.c | |||
@@ -644,27 +644,32 @@ out: | |||
644 | return ret; | 644 | return ret; |
645 | } | 645 | } |
646 | 646 | ||
647 | static struct config_item *o2nm_node_group_make_item(struct config_group *group, | 647 | static int o2nm_node_group_make_item(struct config_group *group, |
648 | const char *name) | 648 | const char *name, |
649 | struct config_item **new_item) | ||
649 | { | 650 | { |
650 | struct o2nm_node *node = NULL; | 651 | struct o2nm_node *node = NULL; |
651 | struct config_item *ret = NULL; | 652 | int ret = 0; |
652 | 653 | ||
653 | if (strlen(name) > O2NM_MAX_NAME_LEN) | 654 | if (strlen(name) > O2NM_MAX_NAME_LEN) { |
654 | goto out; /* ENAMETOOLONG */ | 655 | ret = -ENAMETOOLONG; |
656 | goto out; | ||
657 | } | ||
655 | 658 | ||
656 | node = kzalloc(sizeof(struct o2nm_node), GFP_KERNEL); | 659 | node = kzalloc(sizeof(struct o2nm_node), GFP_KERNEL); |
657 | if (node == NULL) | 660 | if (node == NULL) { |
658 | goto out; /* ENOMEM */ | 661 | ret = -ENOMEM; |
662 | goto out; | ||
663 | } | ||
659 | 664 | ||
660 | strcpy(node->nd_name, name); /* use item.ci_namebuf instead? */ | 665 | strcpy(node->nd_name, name); /* use item.ci_namebuf instead? */ |
661 | config_item_init_type_name(&node->nd_item, name, &o2nm_node_type); | 666 | config_item_init_type_name(&node->nd_item, name, &o2nm_node_type); |
662 | spin_lock_init(&node->nd_lock); | 667 | spin_lock_init(&node->nd_lock); |
663 | 668 | ||
664 | ret = &node->nd_item; | 669 | *new_item = &node->nd_item; |
665 | 670 | ||
666 | out: | 671 | out: |
667 | if (ret == NULL) | 672 | if (ret) |
668 | kfree(node); | 673 | kfree(node); |
669 | 674 | ||
670 | return ret; | 675 | return ret; |
@@ -751,25 +756,31 @@ static struct o2nm_cluster_group *to_o2nm_cluster_group(struct config_group *gro | |||
751 | } | 756 | } |
752 | #endif | 757 | #endif |
753 | 758 | ||
754 | static struct config_group *o2nm_cluster_group_make_group(struct config_group *group, | 759 | static int o2nm_cluster_group_make_group(struct config_group *group, |
755 | const char *name) | 760 | const char *name, |
761 | struct config_group **new_group) | ||
756 | { | 762 | { |
757 | struct o2nm_cluster *cluster = NULL; | 763 | struct o2nm_cluster *cluster = NULL; |
758 | struct o2nm_node_group *ns = NULL; | 764 | struct o2nm_node_group *ns = NULL; |
759 | struct config_group *o2hb_group = NULL, *ret = NULL; | 765 | struct config_group *o2hb_group = NULL; |
760 | void *defs = NULL; | 766 | void *defs = NULL; |
767 | int ret = 0; | ||
761 | 768 | ||
762 | /* this runs under the parent dir's i_mutex; there can be only | 769 | /* this runs under the parent dir's i_mutex; there can be only |
763 | * one caller in here at a time */ | 770 | * one caller in here at a time */ |
764 | if (o2nm_single_cluster) | 771 | if (o2nm_single_cluster) { |
765 | goto out; /* ENOSPC */ | 772 | ret = -ENOSPC; |
773 | goto out; | ||
774 | } | ||
766 | 775 | ||
767 | cluster = kzalloc(sizeof(struct o2nm_cluster), GFP_KERNEL); | 776 | cluster = kzalloc(sizeof(struct o2nm_cluster), GFP_KERNEL); |
768 | ns = kzalloc(sizeof(struct o2nm_node_group), GFP_KERNEL); | 777 | ns = kzalloc(sizeof(struct o2nm_node_group), GFP_KERNEL); |
769 | defs = kcalloc(3, sizeof(struct config_group *), GFP_KERNEL); | 778 | defs = kcalloc(3, sizeof(struct config_group *), GFP_KERNEL); |
770 | o2hb_group = o2hb_alloc_hb_set(); | 779 | o2hb_group = o2hb_alloc_hb_set(); |
771 | if (cluster == NULL || ns == NULL || o2hb_group == NULL || defs == NULL) | 780 | if (cluster == NULL || ns == NULL || o2hb_group == NULL || defs == NULL) { |
781 | ret = -ENOMEM; | ||
772 | goto out; | 782 | goto out; |
783 | } | ||
773 | 784 | ||
774 | config_group_init_type_name(&cluster->cl_group, name, | 785 | config_group_init_type_name(&cluster->cl_group, name, |
775 | &o2nm_cluster_type); | 786 | &o2nm_cluster_type); |
@@ -786,11 +797,11 @@ static struct config_group *o2nm_cluster_group_make_group(struct config_group *g | |||
786 | cluster->cl_idle_timeout_ms = O2NET_IDLE_TIMEOUT_MS_DEFAULT; | 797 | cluster->cl_idle_timeout_ms = O2NET_IDLE_TIMEOUT_MS_DEFAULT; |
787 | cluster->cl_keepalive_delay_ms = O2NET_KEEPALIVE_DELAY_MS_DEFAULT; | 798 | cluster->cl_keepalive_delay_ms = O2NET_KEEPALIVE_DELAY_MS_DEFAULT; |
788 | 799 | ||
789 | ret = &cluster->cl_group; | 800 | *new_group = &cluster->cl_group; |
790 | o2nm_single_cluster = cluster; | 801 | o2nm_single_cluster = cluster; |
791 | 802 | ||
792 | out: | 803 | out: |
793 | if (ret == NULL) { | 804 | if (ret) { |
794 | kfree(cluster); | 805 | kfree(cluster); |
795 | kfree(ns); | 806 | kfree(ns); |
796 | o2hb_free_hb_set(o2hb_group); | 807 | o2hb_free_hb_set(o2hb_group); |