buddy: for batch return, check for full batch before instead of after

This way we have a better chance to call the actual return at a more
suitable time, for example outside a lock.
parent 48128d42
......@@ -817,6 +817,9 @@ BUDDYF(return_off_page)(struct buddy_returns *rets, struct buddy_off_page *page)
map = buddy->map;
CHECK_OBJ_NOTNULL(map, BUDDY_MAP_MAGIC);
if (rets->n == rets->space)
BUDDYF(return)(rets);
assert(rets->n < rets->space);
if (page->off < 0 ||
......@@ -837,8 +840,6 @@ BUDDYF(return_off_page)(struct buddy_returns *rets, struct buddy_off_page *page)
*page = buddy_off_page_nil;
if (rets->n == rets->space)
BUDDYF(return)(rets);
return (1);
}
......@@ -868,6 +869,9 @@ BUDDYF(return_off_extent)(struct buddy_returns *rets,
map = buddy->map;
CHECK_OBJ_NOTNULL(map, BUDDY_MAP_MAGIC);
if (rets->n == rets->space)
BUDDYF(return)(rets);
assert(rets->n < rets->space);
if (extent->off < 0 ||
......@@ -892,9 +896,6 @@ BUDDYF(return_off_extent)(struct buddy_returns *rets,
*extent = buddy_off_extent_nil;
if (rets->n == rets->space)
BUDDYF(return)(rets);
return (1);
}
......@@ -1052,6 +1053,7 @@ BUDDYF(return1_ ## what)(buddy_t *buddy, struct buddy_ ## what *ret) \
struct buddy_returns *rets = BUDDY_RETURNS_STK(buddy, 1); \
\
AN(BUDDYF(return_ ## what)(rets, ret)); \
BUDDYF(return)(rets); \
}
// XXX remove off interface for !FREEPAGE_WHEN
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment