Refactor fellow_busy_region_alloc() to use reqs

parent c0701d0e
......@@ -2165,23 +2165,6 @@ fellow_busy_obj_alloc(struct fellow_cache *fc,
return (FCR_OK(fbo));
}
/* this exists to wrap FC_INJ code */
static struct buddy_off_extent
fellow_region_alloc(const struct fellow_cache *fc, size_t size, int8_t cram)
{
CHECK_OBJ_NOTNULL(fc, FELLOW_CACHE_MAGIC);
AN(size);
if (cram)
FC_INJ_SZLIM(size);
return (FC_INJ ? buddy_off_extent_nil :
buddy_alloc1_off_extent_wait(fellow_dskbuddy(fc->ffd),
FEP_SPC, size, cram));
}
/* commit a region to the busy object */
static struct buddy_off_extent *
......@@ -2214,11 +2197,36 @@ fellow_busy_region_commit(struct fellow_busy *fbo, struct buddy_off_extent reg)
static struct buddy_off_extent *
fellow_busy_region_alloc(struct fellow_busy *fbo, size_t size, int8_t cram)
{
const struct fellow_cache *fc;
struct buddy_off_extent *r;
struct buddy_reqs *reqs;
struct buddy *dskbuddy;
unsigned u;
CHECK_OBJ_NOTNULL(fbo, FELLOW_BUSY_MAGIC);
fc = fbo->fc;
CHECK_OBJ_NOTNULL(fc, FELLOW_CACHE_MAGIC);
dskbuddy = fellow_dskbuddy(fc->ffd);
reqs = BUDDY_REQS_STK(dskbuddy, 1);
BUDDY_REQS_PRI(reqs, FEP_SPC);
AN(size);
AN(buddy_req_extent(reqs, size, cram));
if (cram)
FC_INJ_SZLIM(size);
return (fellow_busy_region_commit(fbo,
fellow_region_alloc(fbo->fc, size, cram)));
if (FC_INJ)
return (NULL);
u = buddy_alloc_wait(reqs);
assert(u == 1);
r = fellow_busy_region_commit(fbo, buddy_get_off_extent(reqs, 0));
buddy_alloc_wait_done(reqs);
return (r);
}
/*
......
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