]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/epm: coroutinize RandomBlockOolWriter::alloc_write_ool_extents()
authorXuehan Xu <xuxuehan@qianxin.com>
Fri, 10 Jul 2026 06:58:15 +0000 (14:58 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 10 Jul 2026 14:24:38 +0000 (22:24 +0800)
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/extent_placement_manager.cc

index 26719dc400bb61668f6d3664ca98c3afa4983f14..8350fb8784ef6cc116640613fca4bdecea3978d2 100644 (file)
@@ -1264,29 +1264,29 @@ RandomBlockOolWriter::alloc_write_ool_extents(
   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());
         }
-      });
+      }
     });
   });
 }