From: Samuel Just Date: Mon, 19 Oct 2020 21:44:16 +0000 (-0700) Subject: crimson/os/seastore/lba_manager/btree: fix lookup_range, scan_* references with weak... X-Git-Tag: v16.1.0~807^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=513ec5333b66fd1b5ded2ed9565371d4448cfc56;p=ceph.git crimson/os/seastore/lba_manager/btree: fix lookup_range, scan_* references with weak transactions 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 --- diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc index 95523769d83..3642f76b37a 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc @@ -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); diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.cc b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.cc index 1676a82be07..1260d477abf 100644 --- a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.cc +++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.cc @@ -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( 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)]{}); }