]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
fixup! crimson/os/seastore/transaction_manager: wait for the demotion when the rbm...
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 9 Jul 2026 02:47:35 +0000 (10:47 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 10 Jul 2026 14:24:38 +0000 (22:24 +0800)
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/extent_placement_manager.h

index 46f5d13d65d568281f0e15a781487dfe4610c172..74b388228281dc0526454e0798b42440340ba73c 100644 (file)
@@ -816,14 +816,14 @@ ExtentPlacementManager::BackgroundProcess::reserve_projected_usage(
     // IO blocked -> needs cleaner -> cleaner sleeping -> nothing runs -> deadlock.
     // Kick the background so it can free space and call maybe_wake_blocked_io().
     auto arm_blocking_io_and_wake = [this] {
-      blocking_io = seastar::promise<>();
+      blocking_io = seastar::shared_promise<>();
       do_wake_background();
     };
     arm_blocking_io_and_wake();
     // we just blocked this IO, now wait until
     // maybe_wake_blocked_io will set value to blocking_io
     do {
-      co_await blocking_io->get_future();
+      co_await blocking_io->get_shared_future();
       ceph_assert(!blocking_io);
       auto res = try_reserve_io(usage);
       if (res.is_successful()) {
index 01142294ffb6b004f7e6b0dadc78f5999805cbee..3f901f1b41545fb7bb8add3b96cddaade7450a72 100644 (file)
@@ -1103,9 +1103,9 @@ private:
       LOG_PREFIX(BackgroundProcess::wait_background);
       SUBINFO(seastore_epm, "");
       if (!blocking_io) {
-        blocking_io = seastar::promise<>();
+        blocking_io = seastar::shared_promise<>();
       }
-      return blocking_io->get_future();
+      return blocking_io->get_shared_future();
     }
 
   protected:
@@ -1355,7 +1355,7 @@ private:
 
     std::optional<seastar::future<>> process_join;
     std::optional<seastar::promise<>> blocking_background;
-    std::optional<seastar::promise<>> blocking_io;
+    std::optional<seastar::shared_promise<>> blocking_io;
     // Set by maybe_wake_blocked_io() whenever it actually unblocks a
     // user IO; consumed by run() to yield exactly once on that edge,
     // giving the woken continuation a chance to retry the reservation