fellow_cache: bring back smaller segment lists when not growing

parent 10542346
......@@ -3002,6 +3002,7 @@ fellow_busy_body_seglist_alloc(struct fellow_busy *fbo,
struct fellow_cache *fc;
unsigned chunk_exponent;
uint16_t ldsegs;
size_t sz;
CHECK_OBJ_NOTNULL(fbo, FELLOW_BUSY_MAGIC);
......@@ -3013,6 +3014,13 @@ fellow_busy_body_seglist_alloc(struct fellow_busy *fbo,
if (chunk_exponent == 0)
chunk_exponent = fc->tune->chunk_exponent;
ldsegs = fellow_cache_seglist_capacity(chunk_exponent);
if (fbo->growing == 0) {
sz = fbo->sz_estimate - fbo->sz_returned;
sz += (((size_t)1 << chunk_exponent) - 1);
sz >>= chunk_exponent;
if (sz < ldsegs)
ldsegs = (uint16_t)sz;
}
#ifdef TEST_DRIVER
if (TEST_LIMIT_LDSEGS > 0)
......
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