]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/lba_manager/btree: fix lookup_range, scan_* references with weak...
authorSamuel Just <sjust@redhat.com>
Mon, 19 Oct 2020 21:44:16 +0000 (14:44 -0700)
committerSamuel Just <sjust@redhat.com>
Tue, 20 Oct 2020 19:27:12 +0000 (12:27 -0700)
Weak transactions won't keep references in memory as we traverse
the tree, update each recursive call to ensure lifecycle of
this.

Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc
src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.cc

index 95523769d83eaffd55b33dac1f6bc4caa1e5bbe8..3642f76b37a0506b6089df32c21362430a2f997b 100644 (file)
@@ -67,7 +67,8 @@ BtreeLBAManager::get_mapping(
     t).safe_then([this, &t, offset, length](auto extent) {
       return extent->lookup_range(
        get_context(t),
-       offset, length);
+       offset, length
+      ).safe_then([extent](auto ret) { return ret; });
     }).safe_then([](auto &&e) {
       logger().debug("BtreeLBAManager::get_mapping: got mapping {}", e);
       return get_mapping_ret(
@@ -306,9 +307,11 @@ BtreeLBAManager::scan_mappings_ret BtreeLBAManager::scan_mappings(
 {
   return seastar::do_with(
     std::move(f),
-    [=, &t](auto &f) {
+    LBANodeRef(),
+    [=, &t](auto &f, auto &lbarootref) {
       return get_root(t).safe_then(
        [=, &t, &f](LBANodeRef lbaroot) mutable {
+         lbarootref = lbaroot;
          return lbaroot->scan_mappings(
            get_context(t),
            begin,
@@ -324,9 +327,11 @@ BtreeLBAManager::scan_mapped_space_ret BtreeLBAManager::scan_mapped_space(
 {
   return seastar::do_with(
     std::move(f),
-    [=, &t](auto &f) {
+    LBANodeRef(),
+    [=, &t](auto &f, auto &lbarootref) {
       return get_root(t).safe_then(
        [=, &t, &f](LBANodeRef lbaroot) mutable {
+         lbarootref = lbaroot;
          return lbaroot->scan_mapped_space(
            get_context(t),
            f);
index 1676a82be077f2c422647830443b309224b4ed11..1260d477abf54fffdd6b04a71eae6f5482bbeb40 100644 (file)
@@ -76,7 +76,7 @@ LBAInternalNode::lookup_range_ret LBAInternalNode::lookup_range(
                                pin_list.begin(), pin_list.end());
                });
          });
-    }).safe_then([result=std::move(result_up)] {
+    }).safe_then([result=std::move(result_up), ref=LBANodeRef(this)] {
       return lookup_range_ertr::make_ready_future<lba_pin_list_t>(
        std::move(*result));
     });
@@ -250,7 +250,7 @@ LBAInternalNode::scan_mappings_ret LBAInternalNode::scan_mappings(
        get_paddr()).safe_then([=, &f](auto child) {
          return child->scan_mappings(c, begin, end, f);
        });
-    });
+    }).safe_then([ref=LBANodeRef(this)]{});
 }
 
 LBAInternalNode::scan_mapped_space_ret LBAInternalNode::scan_mapped_space(
@@ -269,7 +269,7 @@ LBAInternalNode::scan_mapped_space_ret LBAInternalNode::scan_mapped_space(
        get_paddr()).safe_then([=, &f](auto child) {
          return child->scan_mapped_space(c, f);
        });
-    });
+    }).safe_then([ref=LBANodeRef(this)]{});
 }