From 09d971d25dd463174521f6cf287651a42de9f189 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Tue, 29 Mar 2022 14:48:48 +0800 Subject: [PATCH] crimson/os/seastore/btree: allow backref extents to be loaded from disk without initializing For the purpose of higher space reclaim perf, we load backref extents by parallelly invoking Cache::get_extent_by_type, which means loaded backref extents won't be initialized Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/btree/fixed_kv_btree.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index 6b4f0b1a38721..c04d914240944 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -1018,8 +1018,11 @@ private: offset, *ret); // This can only happen during init_cached_extent + // or when backref extent being rewritten by gc space reclaiming if (c.pins && !ret->is_pending() && !ret->pin.is_linked()) { - assert(ret->is_dirty()); + assert(ret->is_dirty() + || (is_backref_node(ret->get_type()) + && ret->is_clean())); init_internal(*ret); } auto meta = ret->get_meta(); @@ -1075,8 +1078,11 @@ private: offset, *ret); // This can only happen during init_cached_extent + // or when backref extent being rewritten by gc space reclaiming if (c.pins && !ret->is_pending() && !ret->pin.is_linked()) { - assert(ret->is_dirty()); + assert(ret->is_dirty() + || (is_backref_node(ret->get_type()) + && ret->is_clean())); init_leaf(*ret); } auto meta = ret->get_meta(); -- 2.39.5