std::list<CachedExtentRef>& extents)
{
if (extents.empty()) {
- return alloc_write_iertr::now();
+ co_return;
}
- return seastar::with_gate(write_guard, [this, &t, &extents] {
+ co_await seastar::with_gate(
+ write_guard,
+ [this, &t, &extents] -> alloc_write_iertr::future<> {
uint64_t size = 0;
for (auto &extent : extents) {
size += extent->get_length();
}
- return trans_intr::make_interruptible(
- token_bucket.get(size)
- ).then_interruptible([this, &t, &extents] {
- seastar::lw_shared_ptr<rbm_pending_ool_t> ptr =
- seastar::make_lw_shared<rbm_pending_ool_t>();
- ptr->pending_extents = t.get_pre_alloc_list();
- assert(!t.is_conflicted());
- t.set_pending_ool(ptr);
- return do_write(t, extents
- ).finally([this, ptr=ptr] {
- if (ptr->is_conflicted) {
- for (auto &e : ptr->pending_extents) {
- rb_cleaner->mark_space_free(e->get_paddr(), e->get_length());
- }
+ co_await trans_intr::make_interruptible(
+ token_bucket.get(size));
+ seastar::lw_shared_ptr<rbm_pending_ool_t> ptr =
+ seastar::make_lw_shared<rbm_pending_ool_t>();
+ ptr->pending_extents = t.get_pre_alloc_list();
+ assert(!t.is_conflicted());
+ t.set_pending_ool(ptr);
+ co_await do_write(t, extents
+ ).finally([this, ptr=ptr] {
+ if (ptr->is_conflicted) {
+ for (auto &e : ptr->pending_extents) {
+ rb_cleaner->mark_space_free(e->get_paddr(), e->get_length());
}
- });
+ }
});
});
}