Buddy allocator: track size of buddy_returns

parent 3031be02
......@@ -2010,8 +2010,10 @@ BUDDYF(return)(struct buddy_returns *rets)
map = buddy->map;
CHECK_OBJ_NOTNULL(map, BUDDY_MAP_MAGIC);
if (rets->n == 0)
if (rets->n == 0) {
AZ(rets->size);
return;
}
for (u = 0, a = rets->i_return; u < rets->n; u++, a++) {
CHECK_OBJ(a, I_RETURN_MAGIC);
......@@ -2036,6 +2038,7 @@ BUDDYF(return)(struct buddy_returns *rets)
memset(rets->i_return, 0, rets->n * sizeof *rets->i_return);
rets->n = 0;
rets->size = 0;
}
/*
......
......@@ -333,6 +333,7 @@ struct buddy_returns {
uint8_t n; // how many requests
buddy_t *buddy;
size_t size;
struct i_return *i_return;
};
......@@ -722,6 +723,8 @@ BUDDYF(return_off_page)(struct buddy_returns *rets, struct buddy_off_page *page)
a->size = (size_t)1 << page->bits;
a->page = ipageof(buddy, page->off, page->bits);
rets->size += a->size;
*page = buddy_off_page_nil;
if (rets->n == rets->space)
......@@ -775,6 +778,8 @@ BUDDYF(return_off_extent)(struct buddy_returns *rets,
a->size = extent->size;
a->page = ipageof(buddy, extent->off, a->bits);
rets->size += a->size;
*extent = buddy_off_extent_nil;
if (rets->n == rets->space)
......
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