From: Samuel Just Date: Wed, 22 Jul 2020 23:32:12 +0000 (-0700) Subject: crimson/os/seastore/lba_manager/btree: factor out common LBANode helpers X-Git-Tag: v16.1.0~983^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=47dc350625a1c1183a08b42b715e9b50c1f11224;p=ceph.git crimson/os/seastore/lba_manager/btree: factor out common LBANode helpers Signed-off-by: Samuel Just --- 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 55860544d419..63597cd8fd9a 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 @@ -183,6 +183,24 @@ struct LBANode : CachedExtent { virtual bool at_min_capacity() const = 0; virtual ~LBANode() = default; + + void on_delta_write(paddr_t record_block_offset) final { + // All in-memory relative addrs are necessarily record-relative + resolve_relative_addrs(record_block_offset); + } + + void on_initial_write() final { + // All in-memory relative addrs are necessarily block-relative + resolve_relative_addrs(get_paddr()); + } + + void on_clean_read() final { + // From initial write of block, relative addrs are necessarily block-relative + resolve_relative_addrs(get_paddr()); + } + +protected: + virtual void resolve_relative_addrs(paddr_t base) = 0; }; using LBANodeRef = LBANode::LBANodeRef; diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.h b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.h index 1ac346077dcb..f6167b7e5845 100644 --- a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.h +++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node_impl.h @@ -178,22 +178,7 @@ struct LBAInternalNode * resolve_relative_addrs fixes up relative internal references * based on base. */ - void resolve_relative_addrs(paddr_t base); - - void on_delta_write(paddr_t record_block_offset) final { - // All in-memory relative addrs are necessarily record-relative - resolve_relative_addrs(record_block_offset); - } - - void on_initial_write() final { - // All in-memory relative addrs are necessarily block-relative - resolve_relative_addrs(get_paddr()); - } - - void on_clean_read() final { - // From initial write of block, relative addrs are necessarily block-relative - resolve_relative_addrs(get_paddr()); - } + void resolve_relative_addrs(paddr_t base) final; extent_types_t get_type() const final { return type; @@ -422,19 +407,7 @@ struct LBALeafNode } // See LBAInternalNode, same concept - void resolve_relative_addrs(paddr_t base); - - void on_delta_write(paddr_t record_block_offset) final { - resolve_relative_addrs(record_block_offset); - } - - void on_initial_write() final { - resolve_relative_addrs(get_paddr()); - } - - void on_clean_read() final { - resolve_relative_addrs(get_paddr()); - } + void resolve_relative_addrs(paddr_t base) final; ceph::bufferlist get_delta() final { assert(!delta_buffer.empty());