From f179c72a61bcda48a54efee48cc3975e493d064d Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Wed, 7 Jun 2023 09:55:38 +0800 Subject: [PATCH] crimson/os/seastore/cached_extent: add prepare_commit interface move new fixedkv-btree nodes' inter-node pointer adjustments into the prepare_commit interface Fixes: https://tracker.ceph.com/issues/61608 Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/btree/fixed_kv_node.h | 4 ++-- src/crimson/os/seastore/cache.cc | 3 +++ src/crimson/os/seastore/cached_extent.h | 8 ++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/crimson/os/seastore/btree/fixed_kv_node.h b/src/crimson/os/seastore/btree/fixed_kv_node.h index fe5052824dc..956a1824e2a 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_node.h +++ b/src/crimson/os/seastore/btree/fixed_kv_node.h @@ -564,7 +564,7 @@ struct FixedKVInternalNode return this->get_split_pivot().get_offset(); } - void prepare_write() final { + void prepare_commit() final { if (this->is_initial_pending()) { if (this->is_rewrite()) { this->set_children_from_prior_instance(); @@ -1004,7 +1004,7 @@ struct FixedKVLeafNode } } - void prepare_write() final { + void prepare_commit() final { if constexpr (has_children) { if (this->is_initial_pending()) { if (this->is_rewrite()) { diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index d6c9fdce3aa..7e7012226d4 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -1098,6 +1098,7 @@ record_t Cache::prepare_record( i->prepare_write(); i->set_io_wait(); + i->prepare_commit(); assert(i->get_version() > 0); auto final_crc = i->get_crc32c(); @@ -1200,6 +1201,7 @@ record_t Cache::prepare_record( bufferlist bl; i->prepare_write(); + i->prepare_commit(); bl.append(i->get_bptr()); if (i->get_type() == extent_types_t::ROOT) { ceph_assert(0 == "ROOT never gets written as a fresh block"); @@ -1240,6 +1242,7 @@ record_t Cache::prepare_record( assert(!i->is_inline()); get_by_ext(efforts.fresh_ool_by_ext, i->get_type()).increment(i->get_length()); + i->prepare_commit(); if (is_backref_mapped_extent_node(i)) { alloc_delta.alloc_blk_ranges.emplace_back( i->get_paddr(), diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 464f34d79fd..871ad8f08e1 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -250,6 +250,14 @@ public: */ virtual void prepare_write() {} + /** + * prepare_commit + * + * Called prior to committing the transaction in which this extent + * is living. + */ + virtual void prepare_commit() {} + /** * on_initial_write * -- 2.39.5