]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cached_extent: drop CLEAN_PENDING state
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 25 Apr 2025 06:47:16 +0000 (14:47 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 4 Jun 2025 02:17:52 +0000 (10:17 +0800)
It is only used to prevent printing details when the buffer is still
loading, and is a special case of CLEAN.

It doesn't worth a dedicated state that complicates state-related
decisions.

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/cached_extent.cc
src/crimson/os/seastore/cached_extent.h

index d83165e27b1d7d9746026d7291c0dc19d059af72..121ac34c39ca75462f316f115f7db136c36a5d80 100644 (file)
@@ -703,7 +703,7 @@ private:
     if (!cached) {
       // partial read
       TCachedExtentRef<T> ret = CachedExtent::make_cached_extent_ref<T>(length);
-      ret->init(CachedExtent::extent_state_t::CLEAN_PENDING,
+      ret->init(CachedExtent::extent_state_t::CLEAN,
                 offset,
                 PLACEMENT_HINT_NULL,
                 NULL_GENERATION,
@@ -724,7 +724,7 @@ private:
     if (is_retired_placeholder_type(cached->get_type())) {
       // partial read
       TCachedExtentRef<T> ret = CachedExtent::make_cached_extent_ref<T>(length);
-      ret->init(CachedExtent::extent_state_t::CLEAN_PENDING,
+      ret->init(CachedExtent::extent_state_t::CLEAN,
                 offset,
                 PLACEMENT_HINT_NULL,
                 NULL_GENERATION,
@@ -1935,8 +1935,7 @@ private:
     const Transaction::src_t* p_src
   ) {
     LOG_PREFIX(Cache::read_extent);
-    assert(extent->state == CachedExtent::extent_state_t::CLEAN_PENDING ||
-           extent->state == CachedExtent::extent_state_t::EXIST_CLEAN ||
+    assert(extent->state == CachedExtent::extent_state_t::EXIST_CLEAN ||
            extent->state == CachedExtent::extent_state_t::CLEAN);
     assert(!extent->is_range_loaded(offset, length));
     assert(is_aligned(offset, get_block_size()));
@@ -1962,9 +1961,6 @@ private:
       });
     }).safe_then(
       [this, FNAME, extent=std::move(extent), offset, length]() mutable {
-        if (likely(extent->state == CachedExtent::extent_state_t::CLEAN_PENDING)) {
-          extent->state = CachedExtent::extent_state_t::CLEAN;
-        }
         ceph_assert(extent->state == CachedExtent::extent_state_t::EXIST_CLEAN
           || extent->state == CachedExtent::extent_state_t::CLEAN
           || !extent->is_valid());
index 44127df625a0334e7763220baac9dab562c38b8a..7bb33949d96abcb59e7bd7836700d87b634ba373 100644 (file)
@@ -47,8 +47,6 @@ std::ostream &operator<<(std::ostream &out, CachedExtent::extent_state_t state)
     return out << "INITIAL_WRITE_PENDING";
   case CachedExtent::extent_state_t::MUTATION_PENDING:
     return out << "MUTATION_PENDING";
-  case CachedExtent::extent_state_t::CLEAN_PENDING:
-    return out << "CLEAN_PENDING";
   case CachedExtent::extent_state_t::CLEAN:
     return out << "CLEAN";
   case CachedExtent::extent_state_t::DIRTY:
index 50b696d59cafcc80510156e5ca969e771e7871fe..598afd7543aa1d6306eecf11bf01aabbad65e52f 100644 (file)
@@ -272,7 +272,6 @@ class CachedExtent
   enum class extent_state_t : uint8_t {
     INITIAL_WRITE_PENDING, // In Transaction::write_set and fresh_block_list
     MUTATION_PENDING,      // In Transaction::write_set and mutated_block_list
-    CLEAN_PENDING,         // CLEAN, but not yet read out
     CLEAN,                 // In Cache::extent_index, Transaction::read_set
                            //  during write, contents match disk, version == 0
     DIRTY,                 // Same as CLEAN, but contents do not match disk,
@@ -479,8 +478,7 @@ public:
        << ", refcount=" << use_count()
        << ", user_hint=" << user_hint
        << ", rewrite_gen=" << rewrite_gen_printer_t{rewrite_generation};
-    if (state != extent_state_t::INVALID &&
-        state != extent_state_t::CLEAN_PENDING) {
+    if (is_valid() && is_fully_loaded() && !is_stable_clean_pending()) {
       print_detail(out);
     }
     return out << ")";
@@ -559,9 +557,8 @@ public:
 
   /// Returns true if extent is stable, written and shared among transactions
   bool is_stable_written() const {
-    return state == extent_state_t::CLEAN_PENDING ||
-      state == extent_state_t::CLEAN ||
-      state == extent_state_t::DIRTY;
+    return state == extent_state_t::CLEAN
+           || state == extent_state_t::DIRTY;
   }
 
   bool is_stable_writting() const {
@@ -598,15 +595,18 @@ public:
     ceph_assert(is_valid());
     return state == extent_state_t::INITIAL_WRITE_PENDING ||
            state == extent_state_t::CLEAN ||
-           state == extent_state_t::CLEAN_PENDING ||
            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;
+    return state == extent_state_t::CLEAN;
+  }
+
+  // Returns true if the buffer is still loading
+  bool is_stable_clean_pending() const {
+    return is_stable_clean() && is_pending_io();
   }
 
   /// Ruturns true if data is persisted while metadata isn't