virtual alloc_extent_ret alloc_extent(
Transaction &t,
laddr_t hint,
- extent_len_t len,
- paddr_t addr,
- uint32_t checksum,
LogicalCachedExtent &nextent,
extent_ref_count_t refcount = EXTENT_DEFAULT_REF_COUNT) = 0;
laddr_t hint,
extent_len_t len,
laddr_t intermediate_key,
- paddr_t actual_addr,
laddr_t intermediate_base) = 0;
virtual alloc_extent_ret reserve_region(
laddr_t hint,
extent_len_t len,
pladdr_t addr,
- paddr_t actual_addr,
uint32_t checksum,
LogicalCachedExtent* nextent,
extent_ref_count_t refcount)
LOG_PREFIX(BtreeLBAManager::_alloc_extent);
TRACET("{}~{}, hint={}, refcount={}", t, addr, len, hint, refcount);
- ceph_assert(actual_addr != P_ADDR_NULL ? addr.is_laddr() : addr.is_paddr());
auto c = get_context(t);
++stats.num_alloc_extents;
auto lookup_attempts = stats.num_alloc_extents_iter_nexts;
hint,
len,
P_ADDR_ZERO,
- P_ADDR_NULL,
0,
nullptr,
EXTENT_DEFAULT_REF_COUNT);
laddr_t hint,
extent_len_t len,
laddr_t intermediate_key,
- paddr_t actual_addr,
laddr_t intermediate_base)
{
assert(intermediate_key != L_ADDR_NULL);
hint,
len,
intermediate_key,
- actual_addr,
0, // crc will only be used and checked with LBA direct mappings
// also see pin_to_extent(_by_type)
nullptr,
alloc_extent_ret alloc_extent(
Transaction &t,
laddr_t hint,
- extent_len_t len,
- paddr_t addr,
- uint32_t checksum,
LogicalCachedExtent &ext,
extent_ref_count_t refcount = EXTENT_DEFAULT_REF_COUNT) final
{
+ // The real checksum will be updated upon transaction commit
+ assert(ext.get_last_committed_crc() == 0);
return _alloc_extent(
t,
hint,
- len,
- addr,
- P_ADDR_NULL,
- checksum,
+ ext.get_length(),
+ ext.get_paddr(),
+ ext.get_last_committed_crc(),
&ext,
refcount);
}
laddr_t hint,
extent_len_t len,
pladdr_t addr,
- paddr_t actual_addr,
uint32_t checksum,
LogicalCachedExtent*,
extent_ref_count_t refcount);
fut = lba_manager->alloc_extent(
t,
lextent->get_laddr() + off,
- nlextent->get_length(),
- nlextent->get_paddr(),
- nlextent->get_last_committed_crc(),
*nlextent,
refcount
).si_then([lextent, nlextent, off](auto mapping) {
return lba_manager->alloc_extent(
t,
laddr_hint,
- len,
- ext->get_paddr(),
- 0, // checksum will be updated upon transaction commit
*ext
).si_then([ext=std::move(ext), laddr_hint, &t](auto &&) mutable {
LOG_PREFIX(TransactionManager::alloc_non_data_extent);
return lba_manager->alloc_extent(
t,
laddr_hint,
- ext->get_length(),
- ext->get_paddr(),
- 0, // checksum will be updated upon trans commit
*ext
).si_then([&ext, &laddr_hint, &t](auto &&) mutable {
LOG_PREFIX(TransactionManager::alloc_extents);
ceph_assert(
(intermediate_base == L_ADDR_NULL)
== (intermediate_key == L_ADDR_NULL));
+ ceph_assert(full_extent_integrity_check
+ ? (ext && ext->is_fully_loaded())
+ : true);
if (ext) {
ceph_assert(!ext->is_mutable());
ceph_assert(ext->get_length() >= original_len);
hint,
mapping.get_length(),
intermediate_key,
- mapping.get_val(),
intermediate_base
);
}
remap_length,
original_laddr,
std::move(original_bptr));
- fut = lba_manager->alloc_extent(
- t, remap_laddr, remap_length, remap_paddr,
- //TODO: oringal_bptr must be present if crc is enabled
- (original_bptr.has_value() ? ext->calc_crc32c() : 0),
- *ext);
+ fut = lba_manager->alloc_extent(t, remap_laddr, *ext);
} else {
fut = lba_manager->clone_mapping(
t,
remap_laddr,
remap_length,
intermediate_key,
- remap_paddr,
intermediate_base);
}
return fut.si_then([remap_laddr, remap_length, remap_paddr](auto &&ref) {
assert(extents.size() == 1);
auto extent = extents.front();
return lba_manager->alloc_extent(
- t, hint, len, extent->get_paddr(), 0, *extent);
+ t, hint, *extent);
}).unsafe_get0();
logger().debug("alloc'd: {}", *ret);
EXPECT_EQ(len, ret->get_length());