From: Xuehan Xu Date: Fri, 10 Jul 2026 06:58:15 +0000 (+0800) Subject: crimson/os/seastore/epm: coroutinize RandomBlockOolWriter::alloc_write_ool_extents() X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f3c6a3f1d9e263aa5a394ce6decae9c357f51aef;p=ceph-ci.git crimson/os/seastore/epm: coroutinize RandomBlockOolWriter::alloc_write_ool_extents() Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index 26719dc400b..8350fb8784e 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -1264,29 +1264,29 @@ RandomBlockOolWriter::alloc_write_ool_extents( std::list& 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 ptr = - seastar::make_lw_shared(); - 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 ptr = + seastar::make_lw_shared(); + 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()); } - }); + } }); }); }