diff options
Diffstat (limited to 'net/tipc/cluster.c')
-rw-r--r-- | net/tipc/cluster.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/net/tipc/cluster.c b/net/tipc/cluster.c index 1aed81584e96..1dcb6940e338 100644 --- a/net/tipc/cluster.c +++ b/net/tipc/cluster.c | |||
@@ -60,8 +60,10 @@ struct cluster *tipc_cltr_create(u32 addr) | |||
60 | int alloc; | 60 | int alloc; |
61 | 61 | ||
62 | c_ptr = (struct cluster *)kmalloc(sizeof(*c_ptr), GFP_ATOMIC); | 62 | c_ptr = (struct cluster *)kmalloc(sizeof(*c_ptr), GFP_ATOMIC); |
63 | if (c_ptr == NULL) | 63 | if (c_ptr == NULL) { |
64 | warn("Cluster creation failure, no memory\n"); | ||
64 | return NULL; | 65 | return NULL; |
66 | } | ||
65 | memset(c_ptr, 0, sizeof(*c_ptr)); | 67 | memset(c_ptr, 0, sizeof(*c_ptr)); |
66 | 68 | ||
67 | c_ptr->addr = tipc_addr(tipc_zone(addr), tipc_cluster(addr), 0); | 69 | c_ptr->addr = tipc_addr(tipc_zone(addr), tipc_cluster(addr), 0); |
@@ -70,30 +72,32 @@ struct cluster *tipc_cltr_create(u32 addr) | |||
70 | else | 72 | else |
71 | max_nodes = tipc_max_nodes + 1; | 73 | max_nodes = tipc_max_nodes + 1; |
72 | alloc = sizeof(void *) * (max_nodes + 1); | 74 | alloc = sizeof(void *) * (max_nodes + 1); |
75 | |||
73 | c_ptr->nodes = (struct node **)kmalloc(alloc, GFP_ATOMIC); | 76 | c_ptr->nodes = (struct node **)kmalloc(alloc, GFP_ATOMIC); |
74 | if (c_ptr->nodes == NULL) { | 77 | if (c_ptr->nodes == NULL) { |
78 | warn("Cluster creation failure, no memory for node area\n"); | ||
75 | kfree(c_ptr); | 79 | kfree(c_ptr); |
76 | return NULL; | 80 | return NULL; |
77 | } | 81 | } |
78 | memset(c_ptr->nodes, 0, alloc); | 82 | memset(c_ptr->nodes, 0, alloc); |
83 | |||
79 | if (in_own_cluster(addr)) | 84 | if (in_own_cluster(addr)) |
80 | tipc_local_nodes = c_ptr->nodes; | 85 | tipc_local_nodes = c_ptr->nodes; |
81 | c_ptr->highest_slave = LOWEST_SLAVE - 1; | 86 | c_ptr->highest_slave = LOWEST_SLAVE - 1; |
82 | c_ptr->highest_node = 0; | 87 | c_ptr->highest_node = 0; |
83 | 88 | ||
84 | z_ptr = tipc_zone_find(tipc_zone(addr)); | 89 | z_ptr = tipc_zone_find(tipc_zone(addr)); |
85 | if (z_ptr == NULL) { | 90 | if (!z_ptr) { |
86 | z_ptr = tipc_zone_create(addr); | 91 | z_ptr = tipc_zone_create(addr); |
87 | } | 92 | } |
88 | if (z_ptr != NULL) { | 93 | if (!z_ptr) { |
89 | tipc_zone_attach_cluster(z_ptr, c_ptr); | 94 | kfree(c_ptr->nodes); |
90 | c_ptr->owner = z_ptr; | ||
91 | } | ||
92 | else { | ||
93 | kfree(c_ptr); | 95 | kfree(c_ptr); |
94 | c_ptr = NULL; | 96 | return NULL; |
95 | } | 97 | } |
96 | 98 | ||
99 | tipc_zone_attach_cluster(z_ptr, c_ptr); | ||
100 | c_ptr->owner = z_ptr; | ||
97 | return c_ptr; | 101 | return c_ptr; |
98 | } | 102 | } |
99 | 103 | ||