).si_then([pin=std::move(pin)](auto extent) {
#ifndef NDEBUG
auto lextent = extent->template cast<LogicalChildNode>();
- auto pin_laddr = pin.get_key();
- if (pin.is_indirect()) {
- pin_laddr = pin.get_intermediate_base();
- }
+ auto pin_laddr = pin.get_intermediate_base();
assert(lextent->get_laddr() == pin_laddr);
#endif
return extent->template cast<T>();
// must be user-oriented required by maybe_init
assert(is_user_transaction(t.get_src()));
using ret = pin_to_extent_ret<T>;
- auto direct_length = pin.is_indirect() ?
- pin.get_intermediate_length() :
- pin.get_length();
+ auto direct_length = pin.get_intermediate_length();
if (full_extent_integrity_check) {
direct_partial_off = 0;
partial_len = direct_length;
direct_length,
direct_partial_off,
partial_len,
- [pin=pin.duplicate(), maybe_init=std::move(maybe_init),
+ [laddr=pin.get_intermediate_base(),
+ maybe_init=std::move(maybe_init),
child_pos=std::move(child_pos)]
(T &extent) mutable {
assert(extent.is_logical());
assert(!extent.has_laddr());
assert(!extent.has_been_invalidated());
- assert(pin.is_valid());
child_pos.link_child(&extent);
- extent.maybe_set_intermediate_laddr(pin);
+ extent.set_laddr(laddr);
maybe_init(extent);
extent.set_seen_by_users();
}
t, pin, type);
assert(is_logical_type(type));
assert(is_background_transaction(t.get_src()));
- laddr_t direct_key;
- extent_len_t direct_length;
- if (pin.is_indirect()) {
- direct_key = pin.get_intermediate_base();
- direct_length = pin.get_intermediate_length();
- } else {
- direct_key = pin.get_key();
- direct_length = pin.get_length();
- }
+ laddr_t direct_key = pin.get_intermediate_base();
+ extent_len_t direct_length = pin.get_intermediate_length();
return cache->get_absent_extent_by_type(
t,
type,
pin.get_val(),
direct_key,
direct_length,
- [pin=pin.duplicate(), child_pos=std::move(child_pos)](CachedExtent &extent) mutable {
+ [direct_key, child_pos=std::move(child_pos)](CachedExtent &extent) mutable {
assert(extent.is_logical());
auto &lextent = static_cast<LogicalChildNode&>(extent);
assert(!lextent.has_laddr());
assert(!lextent.has_been_invalidated());
- assert(pin.is_valid());
child_pos.link_child(&lextent);
- lextent.maybe_set_intermediate_laddr(pref);
+ lextent.set_laddr(direct_key);
// No change to extent::seen_by_user because this path is only
// for background cleaning.
}
TestBlockRef read_pin(
test_transaction_t &t,
LBAMapping pin) {
- auto addr = pin.is_indirect()
- ? pin.get_intermediate_base()
- : pin.get_key();
- auto len = pin.is_indirect()
- ? pin.get_intermediate_length()
- : pin.get_length();
+ auto addr = pin.get_intermediate_base();
+ auto len = pin.get_intermediate_length();
ceph_assert(test_mappings.contains(addr, t.mapping_delta));
ceph_assert(test_mappings.get(addr, t.mapping_delta).desc.len == len);
using ertr = with_trans_ertr<TransactionManager::base_iertr>;
bool indirect = pin.is_indirect();
auto addr = pin.get_key();
- auto im_addr = indirect ? pin.get_intermediate_base() : L_ADDR_NULL;
+ auto im_addr = pin.get_intermediate_base();
auto ext = with_trans_intr(*(t.t), [&](auto& trans) {
return tm->read_pin<TestBlock>(trans, std::move(pin));
}).safe_then([](auto ret) {
}
auto o_laddr = opin.get_key();
bool indirect_opin = opin.is_indirect();
- auto data_laddr = indirect_opin
- ? opin.get_intermediate_base()
- : o_laddr;
+ auto data_laddr = opin.get_intermediate_base();
auto pin = with_trans_intr(*(t.t), [&](auto& trans) {
return tm->remap_pin<TestBlock>(
trans, std::move(opin), std::array{