refactor out logbuffer_fini_dskreqs

parent b6d9a9ba
......@@ -1920,19 +1920,40 @@ logbuffer_wait_flush_fini(const struct fellow_logbuffer *lbuf)
}
static void
logbuffer_fini(struct fellow_logbuffer *lbuf)
logbuffer_fini_dskreqs(struct fellow_logbuffer *lbuf)
{
struct buddy_returns *rets;
struct buddy_ptr_extent alloc;
struct buddy_ptr_page palloc;
size_t sz;
if (lbuf->dskreqs != NULL) {
buddy_alloc_wait_done(&(*lbuf->dskreqs)[0].reqs);
buddy_alloc_wait_done(&(*lbuf->dskreqs)[1].reqs);
sz = buddy_rndup(lbuf->membuddy, sizeof *lbuf->dskreqs);
alloc = BUDDY_PTR_EXTENT(lbuf->dskreqs, sz);
buddy_return1_ptr_extent(lbuf->membuddy, &alloc);
lbuf->dskreqs = NULL;
}
else if (lbuf->dskreqs_mem.reqs.magic == BUDDY_REQS_MAGIC) {
buddy_alloc_wait_done(&lbuf->dskreqs_mem.reqs);
lbuf->dskreqs_mem.reqs.magic = 0;
}
AZ(lbuf->dskreqs);
AZ(lbuf->dskreqs_mem.reqs.magic);
}
static void
logbuffer_fini(struct fellow_logbuffer *lbuf)
{
struct buddy_ptr_page palloc;
CHECK_OBJ_NOTNULL(lbuf, FELLOW_LOGBUFFER_MAGIC);
logbuffer_assert_empty(lbuf);
assert(lbuf->state == LBUF_FINI);
AZ(lbuf->regions_to_free);
logbuffer_fini_dskreqs(lbuf);
if (lbuf->fdil.ioctx != NULL) {
(void)fellow_io_log_wait_completions(
lbuf->membuddy,
......@@ -1942,21 +1963,9 @@ logbuffer_fini(struct fellow_logbuffer *lbuf)
AZ(lbuf->fdil.ioctxp);
}
rets = BUDDY_RETURNS_STK(lbuf->membuddy, 2);
if (lbuf->dskreqs != NULL) {
buddy_alloc_wait_done(&(*lbuf->dskreqs)[0].reqs);
buddy_alloc_wait_done(&(*lbuf->dskreqs)[1].reqs);
sz = buddy_rndup(lbuf->membuddy, sizeof *lbuf->dskreqs);
alloc = BUDDY_PTR_EXTENT(lbuf->dskreqs, sz);
AN(buddy_return_ptr_extent(rets, &alloc));
}
else if (lbuf->dskreqs_mem.reqs.magic == BUDDY_REQS_MAGIC)
buddy_alloc_wait_done(&lbuf->dskreqs_mem.reqs);
logbuffer_wait_flush_fini(lbuf);
TAKE(palloc, lbuf->alloc);
AN(buddy_return_ptr_page(rets, &palloc));
buddy_return(rets);
buddy_return1_ptr_page(lbuf->membuddy, &palloc);
memset(lbuf, 0, sizeof *lbuf);
}
......@@ -2281,6 +2290,7 @@ logbuffer_alloc_some(struct fellow_logbuffer *lbuf,
buddy_alloc_async_ready(&lbuf->dskreqs_mem.reqs)) {
alloc = buddy_get_ptr_extent(&lbuf->dskreqs_mem.reqs, 0);
buddy_alloc_wait_done(&lbuf->dskreqs_mem.reqs);
lbuf->dskreqs_mem.reqs.magic = 0;
AN(alloc.ptr);
assert(alloc.size >= sizeof *lbuf->dskreqs);
......
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