paddr_t offset,
laddr_t laddr,
extent_len_t length,
- extent_init_func_t &&extent_init_func)
+ extent_init_func_t &&extent_init_func,
+ uint32_t pin_crc)
{
LOG_PREFIX(Cache::_get_absent_extent_by_type);
t.add_to_read_set(CachedExtentRef(ret));
touch_extent_fully(*ret, &t_src, t.get_cache_hint());
return trans_intr::make_interruptible(
- read_extent(std::move(ret), 0, length, &t_src
+ read_extent(std::move(ret), 0, length, &t_src, pin_crc
).safe_then([laddr](auto extent) {
if (extent->is_logical()) {
extent->template cast<LogicalCachedExtent>()->set_laddr(laddr);
extent_len_t length,
extent_len_t partial_off,
extent_len_t partial_len,
- Func &&extent_init_func) {
+ Func &&extent_init_func,
+ uint32_t pin_crc = CRC_NULL) {
LOG_PREFIX(Cache::get_absent_extent);
#ifndef NDEBUG
*ret, &t_src, t.get_cache_hint(),
partial_off, partial_len);
return trans_intr::make_interruptible(
- read_extent<T>(std::move(ret), partial_off, partial_len, &t_src));
+ read_extent<T>(std::move(ret), partial_off, partial_len, &t_src, pin_crc));
}
/*
paddr_t offset,
laddr_t laddr,
extent_len_t length,
- extent_init_func_t &&extent_init_func);
+ extent_init_func_t &&extent_init_func,
+ uint32_t pin_crc);
backref_entryrefs_by_seq_t backref_entryrefs_by_seq;
backref_entry_mset_t backref_entry_mset;
*/
template <typename Func>
get_extent_by_type_ret get_absent_extent_by_type(
- Transaction &t, ///< [in] transaction
- extent_types_t type, ///< [in] type tag
- paddr_t offset, ///< [in] starting addr
- laddr_t laddr, ///< [in] logical address if logical
- extent_len_t length, ///< [in] length
- Func &&extent_init_func ///< [in] extent init func
+ Transaction &t, ///< [in] transaction
+ extent_types_t type, ///< [in] type tag
+ paddr_t offset, ///< [in] starting addr
+ laddr_t laddr, ///< [in] logical address if logical
+ extent_len_t length, ///< [in] length
+ Func &&extent_init_func, ///< [in] extent init func
+ uint32_t pin_crc = CRC_NULL ///< [in] pin checksum (See: pin_to_extent)
) {
return _get_absent_extent_by_type(
t,
offset,
laddr,
length,
- extent_init_func_t(std::forward<Func>(extent_init_func)));
+ extent_init_func_t(std::forward<Func>(extent_init_func)),
+ pin_crc);
}
get_extent_by_type_ret get_absent_extent_by_type(
CachedExtentRef &&extent,
extent_len_t offset,
extent_len_t length,
- const Transaction::src_t *p_src)
+ const Transaction::src_t *p_src,
+ uint32_t pin_crc)
{
LOG_PREFIX(Cache::read_extent);
assert(extent->state == CachedExtent::extent_state_t::EXIST_CLEAN ||
read_range.ptr);
});
}).safe_then(
- [this, FNAME, extent=std::move(extent), offset, length]() mutable {
+ [this, FNAME, extent=std::move(extent), offset, length, pin_crc]() mutable {
ceph_assert(extent->state == CachedExtent::extent_state_t::EXIST_CLEAN
|| extent->state == CachedExtent::extent_state_t::CLEAN
|| !extent->is_valid());
TCachedExtentRef<T>&& extent,
extent_len_t offset,
extent_len_t length,
- const Transaction::src_t* p_src
+ const Transaction::src_t* p_src,
+ uint32_t pin_crc = CRC_NULL
) {
- return _read_extent(std::move(extent), offset, length, p_src
+ return _read_extent(std::move(extent), offset, length, p_src, pin_crc
).safe_then([](auto extent) {
return extent->template cast<T>();
});