]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache: don't add EXIST_CLEAN extents to lru
authorXuehan Xu <xxhdx1985126@gmail.com>
Thu, 14 Sep 2023 07:50:20 +0000 (15:50 +0800)
committerMatan Breizman <mbreizma@redhat.com>
Thu, 19 Oct 2023 07:17:26 +0000 (07:17 +0000)
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
(cherry picked from commit 88ca65776bd7248152b55360d4621107ce0caeb9)

src/crimson/os/seastore/cache.h
src/crimson/os/seastore/cached_extent.h

index 2981330a1781aaf84d6e44ebf6eb932298fc635d..50b8d1025d7bd6b9328f6fbdd30fab66c9944ebf 100644 (file)
@@ -467,7 +467,8 @@ public:
             ret->cast<T>());
         });
       } 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<CachedExtentRef>(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);
     }
   }
index 26efa453dd75e0b74b0a5a759ccd221b6f2bef50..5da5a6f02df8d79269561895d4e01eb7c86809a2 100644 (file)
@@ -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;