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;
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
);
/**
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();
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();