]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
fixup! crimson/os/seastore: add write through policy
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 9 Jul 2026 05:36:23 +0000 (13:36 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 10 Jul 2026 14:24:38 +0000 (22:24 +0800)
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/transaction_manager.cc

index 5918996747bbb9ae6b8d80dc67586cc68c9e319e..f02ec456579996e70c91cd19ee9d5b7dbd08724b 100644 (file)
@@ -1319,31 +1319,26 @@ std::vector<CachedExtentRef> Cache::alloc_new_data_extents_by_type(
   Transaction &t,        ///< [in, out] current transaction
   extent_types_t type,   ///< [in] type tag
   extent_len_t length,   ///< [in] length
-  placement_hint_t hint, ///< [in] user hint
-  rewrite_gen_t gen,      ///< [in] rewrite generation
-  paddr_t paddr_hint,
-  bool is_tracked
+  alloc_option_t opt     ///< [in] allocation options
 )
 {
   LOG_PREFIX(Cache::alloc_new_data_extents_by_type);
   SUBDEBUGT(seastore_cache, "allocate {} 0x{:x}B, hint={}, gen={}",
-            t, type, length, hint, rewrite_gen_printer_t{gen});
+            t, type, length, opt.hint, rewrite_gen_printer_t{opt.gen});
   ceph_assert(get_extent_category(type) == data_category_t::DATA);
   std::vector<CachedExtentRef> res;
   switch (type) {
   case extent_types_t::OBJECT_DATA_BLOCK:
     {
       auto extents = alloc_new_data_extents<
-       ObjectDataBlock>(t, length, {hint, gen, is_tracked, paddr_hint,
-           epm.get_write_policy(type, length)});
+       ObjectDataBlock>(t, length, std::move(opt));
       res.insert(res.begin(), extents.begin(), extents.end());
     }
     return res;
   case extent_types_t::TEST_BLOCK:
     {
       auto extents = alloc_new_data_extents<
-       TestBlock>(t, length, {hint, gen, is_tracked, paddr_hint,
-         epm.get_write_policy(type, length)});
+       TestBlock>(t, length, std::move(opt));
       res.insert(res.begin(), extents.begin(), extents.end());
     }
     return res;
index dd32e4b4f198a1d5dd15df7327e21c0fd63c20ab..f7ee043c17e91861d524b49699c324ba8df7a357 100644 (file)
@@ -1339,10 +1339,7 @@ public:
     Transaction &t,        ///< [in, out] current transaction
     extent_types_t type,   ///< [in] type tag
     extent_len_t length,   ///< [in] length
-    placement_hint_t hint, ///< [in] user hint
-    rewrite_gen_t gen,     ///< [in] rewrite generation
-    paddr_t paddr_hint,
-    bool is_tracked
+    alloc_option_t opt     ///< [in] allocation options
     );
 
   /**
index 245a2e7d64914b399198088d78c9c76b35e6db9e..0751fa5f9ccef2519bf3b6d0ebc7ee3f602912a5 100644 (file)
@@ -966,11 +966,16 @@ TransactionManager::rewrite_logical_extent(
           t,
           extent->get_type(),
           extent->get_length(),
-          extent->get_user_hint(),
-          // get target rewrite generation
-          extent->get_rewrite_generation(),
-          paddr_hint,
-          is_tracked);
+          {
+            extent->get_user_hint(),
+            // get target rewrite generation
+            extent->get_rewrite_generation(),
+            is_tracked,
+            paddr_hint,
+            // WRITH_THROUGH is only effective for client io, so
+            // always set the write policy to WRITE_BACK here
+            write_policy_t::WRITE_BACK
+          });
       } catch (crimson::ct_error::eagain&) {}
       if (extents.empty()) {
         epm->maybe_wake_background();
@@ -1272,10 +1277,13 @@ TransactionManager::promote_extent(
           t,
           orig_ext->get_type(),
           orig_ext->get_length(),
-          placement_hint_t::HOT,
-          INIT_GENERATION,
-          P_ADDR_NULL,
-          true);
+          {
+            placement_hint_t::HOT,
+            INIT_GENERATION,
+            true,
+            P_ADDR_NULL,
+            write_policy_t::WRITE_BACK
+          });
       } catch (crimson::ct_error::eagain&) {}
       if (promoted_raw_extents.empty()) {
         epm->maybe_wake_background();