Skip to content

Commit 1c621b0

Browse files
committed
crimson/os/seastore: adapt laddr_offset_t::checked_to_laddr
Signed-off-by: Zhang Song <[email protected]>
1 parent 73d66a6 commit 1c621b0

File tree

12 files changed

+41
-33
lines changed

12 files changed

+41
-33
lines changed

src/crimson/os/seastore/btree/fixed_kv_btree.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,12 +226,18 @@ class FixedKVBtree {
226226
assert(!is_end());
227227
auto val = get_val();
228228
auto key = get_key();
229+
node_key_t end{};
230+
if constexpr (std::is_same_v<node_key_t, laddr_t>) {
231+
end = (key + val.len).checked_to_laddr();
232+
} else {
233+
end = key + val.len;
234+
}
229235
return std::make_unique<pin_t>(
230236
ctx,
231237
leaf.node,
232238
leaf.pos,
233239
val,
234-
fixed_kv_node_meta_t<node_key_t>{ key, key + val.len, 0 });
240+
fixed_kv_node_meta_t<node_key_t>{ key, end, 0 });
235241
}
236242

237243
typename leaf_node_t::Ref get_leaf_node() {

src/crimson/os/seastore/cached_extent.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1325,7 +1325,7 @@ class LogicalCachedExtent : public ChildableCachedExtent {
13251325
void on_rewrite(Transaction&, CachedExtent &extent, extent_len_t off) final {
13261326
assert(get_type() == extent.get_type());
13271327
auto &lextent = (LogicalCachedExtent&)extent;
1328-
set_laddr(lextent.get_laddr() + off);
1328+
set_laddr((lextent.get_laddr() + off).checked_to_laddr());
13291329
}
13301330

13311331
bool has_laddr() const {

src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ BtreeLBAManager::_alloc_extents(
316316
assert((info.key == L_ADDR_NULL) == (laddr_null));
317317
if (!laddr_null) {
318318
assert(info.key >= last_end);
319-
last_end = info.key + info.len;
319+
last_end = (info.key + info.len).checked_to_laddr();
320320
}
321321
}
322322
#endif
@@ -381,7 +381,7 @@ BtreeLBAManager::_alloc_extents(
381381
interruptible::ready_future_marker{},
382382
seastar::stop_iteration::yes);
383383
} else {
384-
state.last_end = pos.get_key() + pos.get_val().len;
384+
state.last_end = (pos.get_key() + pos.get_val().len).checked_to_laddr();
385385
TRACET("{}~{}, hint={}, state: {}~{}, repeat ... -- {}",
386386
t, addr, total_len, hint,
387387
pos.get_key(), pos.get_val().len,
@@ -431,7 +431,7 @@ BtreeLBAManager::_alloc_extents(
431431
return iter.next(c).si_then([&state, &alloc_info](auto it) {
432432
state.insert_iter = it;
433433
if (alloc_info.key == L_ADDR_NULL) {
434-
state.last_end = state.last_end + alloc_info.len;
434+
state.last_end = (state.last_end + alloc_info.len).checked_to_laddr();
435435
}
436436
});
437437
});

src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ class BtreeLBAManager : public LBAManager {
465465
: L_ADDR_NULL;
466466
auto remap_offset = remap.offset;
467467
auto remap_len = remap.len;
468-
auto remap_laddr = orig_laddr + remap_offset;
468+
auto remap_laddr = (orig_laddr + remap_offset).checked_to_laddr();
469469
ceph_assert(intermediate_base != L_ADDR_NULL);
470470
ceph_assert(intermediate_key != L_ADDR_NULL);
471471
ceph_assert(remap_len < orig_len);
@@ -476,7 +476,7 @@ class BtreeLBAManager : public LBAManager {
476476
" intermediate_base: {}, intermediate_key: {}", t,
477477
remap_laddr, orig_paddr, remap_len,
478478
intermediate_base, intermediate_key);
479-
auto remapped_intermediate_key = intermediate_key + remap_offset;
479+
auto remapped_intermediate_key = (intermediate_key + remap_offset).checked_to_laddr();
480480
alloc_infos.emplace_back(
481481
alloc_mapping_info_t::create_indirect(
482482
remap_laddr,
@@ -485,7 +485,7 @@ class BtreeLBAManager : public LBAManager {
485485
}
486486
fut = alloc_cloned_mappings(
487487
t,
488-
remaps.front().offset + orig_laddr,
488+
(remaps.front().offset + orig_laddr).checked_to_laddr(),
489489
std::move(alloc_infos)
490490
).si_then([&orig_mapping](auto imappings) mutable {
491491
std::vector<LBAMappingRef> mappings;
@@ -504,7 +504,7 @@ class BtreeLBAManager : public LBAManager {
504504
} else { // !orig_mapping->is_indirect()
505505
fut = alloc_extents(
506506
t,
507-
remaps.front().offset + orig_laddr,
507+
(remaps.front().offset + orig_laddr).checked_to_laddr(),
508508
std::move(extents),
509509
EXTENT_DEFAULT_REF_COUNT);
510510
}

src/crimson/os/seastore/lba_manager/btree/lba_btree_node.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ BtreeLBAMappingRef LBALeafNode::get_mapping(
8383
this,
8484
iter.get_offset(),
8585
val,
86-
lba_node_meta_t{laddr, laddr + val.len, 0});
86+
lba_node_meta_t{laddr, (laddr + val.len).checked_to_laddr(), 0});
8787
}
8888

8989
}

src/crimson/os/seastore/object_data_handler.cc

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ struct extent_to_write_t {
6464
}
6565

6666
laddr_t get_end_addr() const {
67-
return addr + len;
67+
return (addr + len).checked_to_laddr();
6868
}
6969

7070
static extent_to_write_t create_data(
@@ -544,7 +544,7 @@ ObjectDataHandler::write_ret do_insertions(
544544
off);
545545
}
546546
iter.copy(extent->get_length(), extent->get_bptr().c_str());
547-
off = off + extent->get_length();
547+
off = (off + extent->get_length()).checked_to_laddr();
548548
left -= extent->get_length();
549549
}
550550
return ObjectDataHandler::write_iertr::now();
@@ -708,7 +708,7 @@ struct overwrite_plan_t {
708708
extent_len_t block_size) :
709709
data_base(data_base),
710710
pin_begin(pins.front()->get_key()),
711-
pin_end(pins.back()->get_key() + pins.back()->get_length()),
711+
pin_end((pins.back()->get_key() + pins.back()->get_length()).checked_to_laddr()),
712712
left_paddr(pins.front()->get_val()),
713713
right_paddr(pins.back()->get_val()),
714714
data_begin(data_base + offset),
@@ -1127,7 +1127,7 @@ ObjectDataHandler::clear_ret ObjectDataHandler::trim_data_reservation(
11271127
pin.get_key(),
11281128
size - pin_offset));
11291129
to_write.push_back(extent_to_write_t::create_zero(
1130-
object_data.get_reserved_data_base() + roundup_size,
1130+
(object_data.get_reserved_data_base() + roundup_size).checked_to_laddr(),
11311131
object_data.get_reserved_data_len() - roundup_size));
11321132
return clear_iertr::now();
11331133
} else {
@@ -1152,7 +1152,7 @@ ObjectDataHandler::clear_ret ObjectDataHandler::trim_data_reservation(
11521152
pin.get_key(),
11531153
bl));
11541154
to_write.push_back(extent_to_write_t::create_zero(
1155-
object_data.get_reserved_data_base() + roundup_size,
1155+
(object_data.get_reserved_data_base() + roundup_size).checked_to_laddr(),
11561156
object_data.get_reserved_data_len() - roundup_size));
11571157
return clear_iertr::now();
11581158
});
@@ -1720,7 +1720,8 @@ ObjectDataHandler::clone_ret ObjectDataHandler::clone_extents(
17201720
ceph_assert(offset == last_pos);
17211721
auto fut = TransactionManager::alloc_extent_iertr
17221722
::make_ready_future<LBAMappingRef>();
1723-
auto addr = object_data.get_reserved_data_base() + offset;
1723+
laddr_t addr = (object_data.get_reserved_data_base() + offset)
1724+
.checked_to_laddr();
17241725
if (pin->get_val().is_zero()) {
17251726
fut = ctx.tm.reserve_region(ctx.t, addr, pin->get_length());
17261727
} else {
@@ -1738,7 +1739,7 @@ ObjectDataHandler::clone_ret ObjectDataHandler::clone_extents(
17381739
if (last_pos != object_data.get_reserved_data_len()) {
17391740
return ctx.tm.reserve_region(
17401741
ctx.t,
1741-
object_data.get_reserved_data_base() + last_pos,
1742+
(object_data.get_reserved_data_base() + last_pos).checked_to_laddr(),
17421743
object_data.get_reserved_data_len() - last_pos
17431744
).si_then([](auto) {
17441745
return seastar::now();

src/crimson/os/seastore/onode.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,9 @@ class Onode : public boost::intrusive_ref_counter<
8282
assert(default_metadata_offset);
8383
assert(default_metadata_range);
8484
uint64_t range_blocks = default_metadata_range / block_size;
85-
return get_hint() + default_metadata_offset +
86-
(((uint32_t)std::rand() % range_blocks) * block_size);
85+
auto random_offset = default_metadata_offset +
86+
(((uint32_t)std::rand() % range_blocks) * block_size);
87+
return (get_hint() + random_offset).checked_to_laddr();
8788
}
8889
laddr_t get_data_hint() const {
8990
return get_hint();

src/crimson/os/seastore/transaction_manager.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ TransactionManager::rewrite_logical_extent(
585585
if (first_extent) {
586586
fut = lba_manager->update_mapping(
587587
t,
588-
lextent->get_laddr() + off,
588+
(lextent->get_laddr() + off).checked_to_laddr(),
589589
lextent->get_length(),
590590
lextent->get_paddr(),
591591
nlextent->get_length(),
@@ -599,7 +599,7 @@ TransactionManager::rewrite_logical_extent(
599599
ceph_assert(refcount != 0);
600600
fut = lba_manager->alloc_extent(
601601
t,
602-
lextent->get_laddr() + off,
602+
(lextent->get_laddr() + off).checked_to_laddr(),
603603
*nlextent,
604604
refcount
605605
).si_then([lextent, nlextent, off](auto mapping) {

src/crimson/os/seastore/transaction_manager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ class TransactionManager : public ExtentCallbackInterface {
532532
for (auto &remap : remaps) {
533533
auto remap_offset = remap.offset;
534534
auto remap_len = remap.len;
535-
auto remap_laddr = original_laddr + remap_offset;
535+
auto remap_laddr = (original_laddr + remap_offset).checked_to_laddr();
536536
auto remap_paddr = original_paddr.add_offset(remap_offset);
537537
ceph_assert(remap_len < original_len);
538538
ceph_assert(remap_offset + remap_len <= original_len);

src/crimson/tools/store_nbd/tm_driver.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ seastar::future<bufferlist> TMDriver::read(
121121
cur = i.first;
122122
}
123123
blret.append(i.second->get_bptr());
124-
cur += i.second->get_bptr().length();
124+
cur = (cur + i.second->get_bptr().length()).checked_to_laddr();
125125
}
126126
if (blret.length() != size) {
127127
assert(blret.length() < size);

0 commit comments

Comments
 (0)