- new = pcpu_realloc(chunk->map,
- chunk->map_alloc * sizeof(new[0]),
- new_alloc * sizeof(new[0]));
+ if (chunk->map_alloc < PCPU_DFL_MAP_ALLOC) {
+ /*
+ * map_alloc smaller than the default size
+ * indicates that the chunk is one of the
+ * first chunks and still using static map.
+ * Allocate a dynamic one and copy.
+ */
+ new = pcpu_realloc(NULL, 0, new_alloc * sizeof(new[0]));
+ if (new)
+ memcpy(new, chunk->map,
+ chunk->map_alloc * sizeof(new[0]));
+ } else
+ new = pcpu_realloc(chunk->map,
+ chunk->map_alloc * sizeof(new[0]),
+ new_alloc * sizeof(new[0]));