arena: use the entire imported span
The source arena will round up to its quantum. However, we would only
know that we got 'import_size', but we might get far more than that from
the parent. If we round-up in advance, we'll know how much we are
getting.
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/kern/src/arena.c b/kern/src/arena.c
index 2c26ff3..267871f 100644
--- a/kern/src/arena.c
+++ b/kern/src/arena.c
@@ -687,9 +687,14 @@
void *span;
size_t import_size;
- /* MAX check, in case size << scale overflows */
- import_size = MAX(size, size << arena->import_scale);
if (arena->source) {
+ /* MAX check, in case size << scale overflows */
+ import_size = MAX(size, size << arena->import_scale);
+ /* The source will roundup to the nearest quantum. We might as
+ * well do it now so that we know about the extra space.
+ * Otherwise we'd just waste the excess. */
+ import_size = MAX(import_size,
+ ROUNDUP(import_size, arena->source->quantum));
span = arena->afunc(arena->source, import_size, flags);
if (!span)
return FALSE;