]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/async_cleaner: use weak transaction to get backref mappings
authorYingxin Cheng <yingxin.cheng@intel.com>
Thu, 11 Aug 2022 05:54:48 +0000 (13:54 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Mon, 15 Aug 2022 03:34:51 +0000 (11:34 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/async_cleaner.cc

index 70e590ec24087fd4e4ab7ceeed8039c5bd690446..70e83bb4f88e2d54e741fc2245d4b43ecea28043 100644 (file)
@@ -905,23 +905,14 @@ AsyncCleaner::retrieve_backref_mappings(
   paddr_t start_paddr,
   paddr_t end_paddr)
 {
-  return seastar::do_with(
-    backref_pin_list_t(),
-    [this, start_paddr, end_paddr](auto &pin_list) {
-    return repeat_eagain([this, start_paddr, end_paddr, &pin_list] {
-      return ecb->with_transaction_intr(
-       Transaction::src_t::READ,
-       "get_backref_mappings",
-       [this, start_paddr, end_paddr](auto &t) {
-       return backref_manager.get_mappings(
-         t, start_paddr, end_paddr
-       );
-      }).safe_then([&pin_list](auto&& list) {
-       pin_list = std::move(list);
-      });
-    }).safe_then([&pin_list] {
-      return seastar::make_ready_future<backref_pin_list_t>(std::move(pin_list));
-    });
+  // Backref-tree doesn't support tree-read during tree-updates with parallel
+  // transactions.  So, concurrent transactions between trim and reclaim are
+  // not allowed right now.
+  return ecb->with_transaction_weak(
+      "backref_get_mappings",
+      [this, start_paddr, end_paddr](auto &t) {
+    return backref_manager.get_mappings(
+      t, start_paddr, end_paddr);
   });
 }