X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=net%2Ftipc%2Fcluster.c;h=b46b5188a9fd77d01bebd8ed5c481b5b5e1fcfc9;hb=3dcf7c5e8b92387e0c63b3c75757fee1991f78f8;hp=1aed81584e9693e0c9d075cd4148a6dff1f4a2f4;hpb=86579dd06deecfa6ac88d5e84e4d63c397cd6f6d;p=powerpc.git diff --git a/net/tipc/cluster.c b/net/tipc/cluster.c index 1aed81584e..b46b5188a9 100644 --- a/net/tipc/cluster.c +++ b/net/tipc/cluster.c @@ -57,43 +57,43 @@ struct cluster *tipc_cltr_create(u32 addr) struct _zone *z_ptr; struct cluster *c_ptr; int max_nodes; - int alloc; - c_ptr = (struct cluster *)kmalloc(sizeof(*c_ptr), GFP_ATOMIC); - if (c_ptr == NULL) + c_ptr = kzalloc(sizeof(*c_ptr), GFP_ATOMIC); + if (c_ptr == NULL) { + warn("Cluster creation failure, no memory\n"); return NULL; - memset(c_ptr, 0, sizeof(*c_ptr)); + } c_ptr->addr = tipc_addr(tipc_zone(addr), tipc_cluster(addr), 0); if (in_own_cluster(addr)) max_nodes = LOWEST_SLAVE + tipc_max_slaves; else max_nodes = tipc_max_nodes + 1; - alloc = sizeof(void *) * (max_nodes + 1); - c_ptr->nodes = (struct node **)kmalloc(alloc, GFP_ATOMIC); + + c_ptr->nodes = kcalloc(max_nodes + 1, sizeof(void*), GFP_ATOMIC); if (c_ptr->nodes == NULL) { + warn("Cluster creation failure, no memory for node area\n"); kfree(c_ptr); return NULL; } - memset(c_ptr->nodes, 0, alloc); + if (in_own_cluster(addr)) tipc_local_nodes = c_ptr->nodes; c_ptr->highest_slave = LOWEST_SLAVE - 1; c_ptr->highest_node = 0; z_ptr = tipc_zone_find(tipc_zone(addr)); - if (z_ptr == NULL) { + if (!z_ptr) { z_ptr = tipc_zone_create(addr); } - if (z_ptr != NULL) { - tipc_zone_attach_cluster(z_ptr, c_ptr); - c_ptr->owner = z_ptr; - } - else { + if (!z_ptr) { + kfree(c_ptr->nodes); kfree(c_ptr); - c_ptr = NULL; + return NULL; } + tipc_zone_attach_cluster(z_ptr, c_ptr); + c_ptr->owner = z_ptr; return c_ptr; }