From: Samuel Just Date: Wed, 20 Oct 2021 06:48:41 +0000 (-0700) Subject: crimson/os/seastore/lba_manager/btree: tolerate op_context_t without pins X-Git-Tag: v17.1.0~607^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b32fbda595177bce690918add1b5cb27eb994f99;p=ceph.git crimson/os/seastore/lba_manager/btree: tolerate op_context_t without pins Simpler to construct unit tests for the LBABTree itself without pins. Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h index 5803d392de198..59d032e76e1ef 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h @@ -130,7 +130,7 @@ private: btree_pin_set_t pin_set; op_context_t get_context(Transaction &t) { - return op_context_t{cache, pin_set, t}; + return op_context_t{cache, t, &pin_set}; } static btree_range_pin_t &get_pin(CachedExtent &e); diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_range_pin.cc b/src/crimson/os/seastore/lba_manager/btree/btree_range_pin.cc index 549dabaae0dab..a5416e174865e 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_range_pin.cc +++ b/src/crimson/os/seastore/lba_manager/btree/btree_range_pin.cc @@ -16,14 +16,15 @@ namespace crimson::os::seastore::lba_manager::btree { void btree_range_pin_t::take_pin(btree_range_pin_t &other) { ceph_assert(other.extent); - ceph_assert(other.pins); - other.pins->replace_pin(*this, other); - pins = other.pins; - other.pins = nullptr; - - if (other.has_ref()) { - other.drop_ref(); - acquire_ref(); + if (other.pins) { + other.pins->replace_pin(*this, other); + pins = other.pins; + other.pins = nullptr; + + if (other.has_ref()) { + other.drop_ref(); + acquire_ref(); + } } } diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc b/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc index 375b57b8172cb..31770ed688eb8 100644 --- a/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc +++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc @@ -267,8 +267,10 @@ LBABtree::init_cached_extent_ret LBABtree::init_cached_extent( iter.get_val().paddr == logn->get_paddr()) { logn->set_pin(iter.get_pin()); ceph_assert(iter.get_val().len == e->get_length()); - c.pins.add_pin( - static_cast(logn->get_pin()).pin); + if (c.pins) { + c.pins->add_pin( + static_cast(logn->get_pin()).pin); + } DEBUGT("logical extent {} live, initialized", c.trans, *logn); return e; } else { @@ -411,7 +413,9 @@ LBABtree::get_internal_node_ret LBABtree::get_internal_node( ceph_assert(depth == meta.depth); if (!ret->is_pending() && !ret->pin.is_linked()) { ret->pin.set_range(meta); - c.pins.add_pin(ret->pin); + if (c.pins) { + c.pins->add_pin(ret->pin); + } } return get_internal_node_ret( interruptible::ready_future_marker{}, @@ -446,7 +450,9 @@ LBABtree::get_leaf_node_ret LBABtree::get_leaf_node( ceph_assert(1 == meta.depth); if (!ret->is_pending() && !ret->pin.is_linked()) { ret->pin.set_range(meta); - c.pins.add_pin(ret->pin); + if (c.pins) { + c.pins->add_pin(ret->pin); + } } return get_leaf_node_ret( interruptible::ready_future_marker{}, diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h index 67bc8f155a20a..146942eb6f968 100644 --- a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h +++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h @@ -25,8 +25,8 @@ using base_iertr = LBAManager::base_iertr; struct op_context_t { Cache &cache; - btree_pin_set_t &pins; Transaction &trans; + btree_pin_set_t *pins = nullptr; }; /**