From e5645e9c8e3dbca477d6e6e71aa05c9be64bc957 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Thu, 14 Sep 2023 15:50:20 +0800 Subject: [PATCH] crimson/os/seastore/cache: don't add EXIST_CLEAN extents to lru Signed-off-by: Xuehan Xu (cherry picked from commit 88ca65776bd7248152b55360d4621107ce0caeb9) --- src/crimson/os/seastore/cache.h | 9 ++++++--- src/crimson/os/seastore/cached_extent.h | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 2981330a1781a..50b8d1025d7bd 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -467,7 +467,8 @@ public: ret->cast()); }); } else { - touch_extent(*ret); + assert(!ret->is_mutable()); + touch_extent(*ret); SUBDEBUGT(seastore_cache, "{} {}~{} is present on t without been \ fully loaded, reading ...", t, T::TYPE, offset, length); auto bp = alloc_cache_buf(ret->get_length()); @@ -566,6 +567,7 @@ public: // user should not see RETIRED_PLACEHOLDER extents ceph_assert(p_extent->get_type() != extent_types_t::RETIRED_PLACEHOLDER); if (!p_extent->is_fully_loaded()) { + assert(!p_extent->is_mutable()); touch_extent(*p_extent); LOG_PREFIX(Cache::get_extent_viewable_by_trans); SUBDEBUG(seastore_cache, @@ -661,7 +663,8 @@ private: return seastar::make_ready_future(ret); }); } else { - touch_extent(*ret); + assert(!ret->is_mutable()); + touch_extent(*ret); SUBDEBUGT(seastore_cache, "{} {}~{} {} is present on t without been \ fully loaded, reading ...", t, type, offset, length, laddr); auto bp = alloc_cache_buf(ret->get_length()); @@ -1281,7 +1284,7 @@ public: { if (p_src && is_background_transaction(*p_src)) return; - if (ext.is_clean() && !ext.is_placeholder()) { + if (ext.is_stable_clean() && !ext.is_placeholder()) { lru.move_to_top(ext); } } diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 26efa453dd75e..5da5a6f02df8d 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -441,6 +441,13 @@ public: state == extent_state_t::EXIST_CLEAN; } + // Returs true if extent is stable and clean + bool is_stable_clean() const { + ceph_assert(is_valid()); + return state == extent_state_t::CLEAN || + state == extent_state_t::CLEAN_PENDING; + } + /// Ruturns true if data is persisted while metadata isn't bool is_exist_clean() const { return state == extent_state_t::EXIST_CLEAN; -- 2.39.5