From: Samuel Just Date: Fri, 30 Oct 2020 21:18:27 +0000 (-0700) Subject: crimson/os/seastore/.../lba_btree_node_impl: hold reference to *this during lookup X-Git-Tag: v16.1.0~712^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7230aac40c59219c827d9540901a2ef437fa9c49;p=ceph.git crimson/os/seastore/.../lba_btree_node_impl: hold reference to *this during lookup 4f2f4f modified TransactionManager::mount() to use a weak_transaction while calling init_cached_extents. This is fine, but lookup() needs to hold a reference to *this until the child lookup completes in order to ensure residence in the lba pinning set. Signed-off-by: Samuel Just --- 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 47b974b5f40..39e197175c7 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 @@ -46,7 +46,7 @@ LBAInternalNode::lookup_ret LBAInternalNode::lookup( iter->get_val(), get_paddr()).safe_then([c, addr, depth](auto child) { return child->lookup(c, addr, depth); - }); + }).finally([ref=LBANodeRef(this)] {}); } LBAInternalNode::lookup_range_ret LBAInternalNode::lookup_range(