From 346ea03d75aa2dff2443871b56fbcf572471d22e Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Thu, 9 Jul 2026 13:36:23 +0800 Subject: [PATCH] fixup! crimson/os/seastore: add write through policy --- src/crimson/os/seastore/cache.cc | 13 +++------- src/crimson/os/seastore/cache.h | 5 +--- .../os/seastore/transaction_manager.cc | 26 ++++++++++++------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 5918996747b..f02ec456579 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -1319,31 +1319,26 @@ std::vector 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 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; diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index dd32e4b4f19..f7ee043c17e 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -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 ); /** diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 245a2e7d649..0751fa5f9cc 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -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(); -- 2.47.3