On 03/27/2014 01:18 PM, Ilya Dryomov wrote: > Use krealloc() instead of rolling our own. (krealloc() with a NULL > first argument acts as a kmalloc()). Properly initalize the new array > elements. This is needed to make future additions to osdmap easier. Looks good. Reviewed-by: Alex Elder <elder@xxxxxxxxxx> > Signed-off-by: Ilya Dryomov <ilya.dryomov@xxxxxxxxxxx> > --- > net/ceph/osdmap.c | 32 +++++++++++++++++--------------- > 1 file changed, 17 insertions(+), 15 deletions(-) > > diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c > index d6a569c5508f..4565c72fec5c 100644 > --- a/net/ceph/osdmap.c > +++ b/net/ceph/osdmap.c > @@ -646,38 +646,40 @@ void ceph_osdmap_destroy(struct ceph_osdmap *map) > } > > /* > - * adjust max osd value. reallocate arrays. > + * Adjust max_osd value, (re)allocate arrays. > + * > + * The new elements are properly initialized. > */ > static int osdmap_set_max_osd(struct ceph_osdmap *map, int max) > { > u8 *state; > - struct ceph_entity_addr *addr; > u32 *weight; > + struct ceph_entity_addr *addr; > + int i; > > - state = kcalloc(max, sizeof(*state), GFP_NOFS); > - addr = kcalloc(max, sizeof(*addr), GFP_NOFS); > - weight = kcalloc(max, sizeof(*weight), GFP_NOFS); > - if (state == NULL || addr == NULL || weight == NULL) { > + state = krealloc(map->osd_state, max*sizeof(*state), GFP_NOFS); > + weight = krealloc(map->osd_weight, max*sizeof(*weight), GFP_NOFS); > + addr = krealloc(map->osd_addr, max*sizeof(*addr), GFP_NOFS); > + if (!state || !weight || !addr) { > kfree(state); > - kfree(addr); > kfree(weight); > + kfree(addr); > + > return -ENOMEM; > } > > - /* copy old? */ > - if (map->osd_state) { > - memcpy(state, map->osd_state, map->max_osd*sizeof(*state)); > - memcpy(addr, map->osd_addr, map->max_osd*sizeof(*addr)); > - memcpy(weight, map->osd_weight, map->max_osd*sizeof(*weight)); > - kfree(map->osd_state); > - kfree(map->osd_addr); > - kfree(map->osd_weight); > + for (i = map->max_osd; i < max; i++) { > + state[i] = 0; > + weight[i] = CEPH_OSD_OUT; > + memset(addr + i, 0, sizeof(*addr)); > } > > map->osd_state = state; > map->osd_weight = weight; > map->osd_addr = addr; > + > map->max_osd = max; > + > return 0; > } > > -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html