From 0128992c6b0d0fb1f58ef66d85f19c1085835cf6 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 6 Jun 2008 11:44:51 -0700 Subject: [PATCH] kclient: simplify osdmap array allocation --- src/kernel/osdmap.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/kernel/osdmap.c b/src/kernel/osdmap.c index a936967880ce5..825111532977f 100644 --- a/src/kernel/osdmap.c +++ b/src/kernel/osdmap.c @@ -277,6 +277,7 @@ void osdmap_destroy(struct ceph_osdmap *map) if (map->crush) crush_destroy(map->crush); kfree(map->osd_state); + kfree(map->osd_addr); kfree(map); } @@ -285,18 +286,20 @@ static int osdmap_set_max_osd(struct ceph_osdmap *map, int max) __u8 *state; struct ceph_entity_addr *addr; - state = kzalloc(max * (sizeof(__u32) + - sizeof(struct ceph_entity_addr)), - GFP_NOFS); - if (state == NULL) + state = kzalloc(max * sizeof(__u32), GFP_NOFS); + addr = kzalloc(max * sizeof(struct ceph_entity_addr), GFP_NOFS); + if (state == NULL || addr == NULL) { + kfree(state); + kfree(addr); return -ENOMEM; - addr = (void *)((__u32 *)state + max); + } /* copy old? */ if (map->osd_state) { - memcpy(state, map->osd_state, map->max_osd); - memcpy(addr, map->osd_addr, map->max_osd); + memcpy(state, map->osd_state, map->max_osd*sizeof(*state)); + memcpy(addr, map->osd_addr, map->max_osd*sizeof(*addr)); kfree(map->osd_state); + kfree(map->osd_addr); } map->osd_state = state; -- 2.39.5