Skip to content

Commit a97269f

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

File tree

7 files changed

+52
-43
lines changed

7 files changed

+52
-43
lines changed

src/crimson/os/seastore/cache.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -977,10 +977,9 @@ class Cache {
977977
TCachedExtentRef<T> ext;
978978
if (original_bptr.has_value()) {
979979
// shallow copy the buffer from original extent
980-
auto nbp = ceph::bufferptr(
981-
*original_bptr,
982-
remap_laddr - original_laddr,
983-
remap_length);
980+
auto remap_offset = remap_laddr.get_byte_distance<
981+
extent_len_t>(original_laddr);
982+
auto nbp = ceph::bufferptr(*original_bptr, remap_offset, remap_length);
984983
// ExtentPlacementManager::alloc_new_extent will make a new
985984
// (relative/temp) paddr, so make extent directly
986985
ext = CachedExtent::make_cached_extent_ref<T>(std::move(nbp));

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,8 @@ BtreeLBAManager::_alloc_extents(
325325
total_len += info.len;
326326
}
327327
} else {
328-
total_len = alloc_infos.back().key + alloc_infos.back().len - hint;
328+
auto end = alloc_infos.back().key + alloc_infos.back().len;
329+
total_len = end.get_byte_distance<extent_len_t>(hint);
329330
}
330331

331332
struct state_t {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class BtreeLBAMapping : public BtreeNodeMapping<laddr_t, paddr_t> {
128128
assert(intermediate_key >= intermediate_base);
129129
assert((intermediate_key == L_ADDR_NULL)
130130
== (intermediate_base == L_ADDR_NULL));
131-
return intermediate_key - intermediate_base;
131+
return intermediate_key.get_byte_distance<extent_len_t>(intermediate_base);
132132
}
133133

134134
extent_len_t get_intermediate_length() const final {

src/crimson/os/seastore/object_data_handler.cc

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ overwrite_ops_t prepare_ops_list(
268268
ops.to_remap.push_back(extent_to_remap_t::create_remap2(
269269
std::move(front.pin),
270270
front.len,
271-
back.addr - front.addr - front.len));
271+
back.addr.get_byte_distance<extent_len_t>(front.addr) - front.len));
272272
ops.to_remove.pop_front();
273273
} else {
274274
// prepare to_remap, happens in one or multiple extents
@@ -289,7 +289,7 @@ overwrite_ops_t prepare_ops_list(
289289
back.pin->get_key() + back.pin->get_length());
290290
ops.to_remap.push_back(extent_to_remap_t::create_remap1(
291291
std::move(back.pin),
292-
back.addr - back.pin->get_key(),
292+
back.addr.get_byte_distance<extent_len_t>(back.pin->get_key()),
293293
back.len));
294294
ops.to_remove.pop_back();
295295
}
@@ -342,8 +342,9 @@ overwrite_ops_t prepare_ops_list(
342342
range.insert(r.pin->get_key(), r.pin->get_length());
343343
if (range.contains(region.addr, region.len) && !r.pin->is_clone()) {
344344
to_remap.push_back(extent_to_remap_t::create_overwrite(
345-
region.addr - range.begin().get_start(), region.len,
346-
std::move(r.pin), *region.to_write));
345+
region.addr.get_byte_distance<
346+
extent_len_t> (range.begin().get_start()),
347+
region.len, std::move(r.pin), *region.to_write));
347348
return true;
348349
}
349350
return false;
@@ -649,35 +650,35 @@ struct overwrite_plan_t {
649650

650651
public:
651652
extent_len_t get_left_size() const {
652-
return data_begin - pin_begin;
653+
return data_begin.get_byte_distance<extent_len_t>(pin_begin);
653654
}
654655

655656
extent_len_t get_left_extent_size() const {
656-
return aligned_data_begin - pin_begin;
657+
return aligned_data_begin.get_byte_distance<extent_len_t>(pin_begin);
657658
}
658659

659660
extent_len_t get_left_alignment_size() const {
660-
return data_begin - aligned_data_begin;
661+
return data_begin.get_byte_distance<extent_len_t>(aligned_data_begin);
661662
}
662663

663664
extent_len_t get_right_size() const {
664-
return pin_end - data_end;
665+
return pin_end.get_byte_distance<extent_len_t>(data_end);
665666
}
666667

667668
extent_len_t get_right_extent_size() const {
668-
return pin_end - aligned_data_end;
669+
return pin_end.get_byte_distance<extent_len_t>(aligned_data_end);
669670
}
670671

671672
extent_len_t get_right_alignment_size() const {
672-
return aligned_data_end - data_end;
673+
return aligned_data_end.get_byte_distance<extent_len_t>(data_end);
673674
}
674675

675676
extent_len_t get_aligned_data_size() const {
676-
return aligned_data_end - aligned_data_begin;
677+
return aligned_data_end.get_byte_distance<extent_len_t>(aligned_data_begin);
677678
}
678679

679680
extent_len_t get_pins_size() const {
680-
return pin_end - pin_begin;
681+
return pin_end.get_byte_distance<extent_len_t>(pin_begin);
681682
}
682683

683684
friend std::ostream& operator<<(
@@ -942,9 +943,9 @@ operate_ret operate_right(context_t ctx, LBAMappingRef &pin, const overwrite_pla
942943
std::nullopt);
943944
} else {
944945
auto append_offset =
945-
overwrite_plan.data_end
946-
- right_pin_begin
947-
+ pin->get_intermediate_offset();
946+
overwrite_plan.data_end.get_byte_distance<
947+
extent_len_t>(right_pin_begin)
948+
+ pin->get_intermediate_offset();
948949
return ctx.tm.read_pin<ObjectDataBlock>(
949950
ctx.t, pin->duplicate()
950951
).si_then([append_offset, append_len](auto right_extent) {
@@ -974,9 +975,9 @@ operate_ret operate_right(context_t ctx, LBAMappingRef &pin, const overwrite_pla
974975
std::nullopt);
975976
} else {
976977
auto append_offset =
977-
overwrite_plan.data_end
978-
- right_pin_begin
979-
+ pin->get_intermediate_offset();
978+
overwrite_plan.data_end.get_byte_distance<
979+
extent_len_t>(right_pin_begin)
980+
+ pin->get_intermediate_offset();
980981
return ctx.tm.read_pin<ObjectDataBlock>(
981982
ctx.t, pin->duplicate()
982983
).si_then([append_offset, append_len,
@@ -1102,8 +1103,8 @@ ObjectDataHandler::clear_ret ObjectDataHandler::trim_data_reservation(
11021103
ceph_assert(pin.get_key() >= object_data.get_reserved_data_base());
11031104
ceph_assert(
11041105
pin.get_key() <= object_data.get_reserved_data_base() + size);
1105-
auto pin_offset = pin.get_key() -
1106-
object_data.get_reserved_data_base();
1106+
auto pin_offset = pin.get_key().template get_byte_distance<extent_len_t>(
1107+
object_data.get_reserved_data_base());
11071108
if ((pin.get_key() == (object_data.get_reserved_data_base() + size)) ||
11081109
(pin.get_val().is_zero())) {
11091110
/* First pin is exactly at the boundary or is a zero pin. Either way,
@@ -1517,10 +1518,12 @@ ObjectDataHandler::read_ret ObjectDataHandler::read(
15171518
DEBUGT("got {}~{} from zero-pin {}~{}",
15181519
ctx.t,
15191520
l_current,
1520-
l_current_end - l_current,
1521+
l_current_end.get_byte_distance<loffset_t>(l_current),
15211522
pin_key,
15221523
pin_len);
1523-
ret.append_zero(l_current_end - l_current);
1524+
ret.append_zero(
1525+
l_current_end.get_byte_distance<
1526+
extent_len_t>(l_current));
15241527
l_current = l_current_end;
15251528
return seastar::now();
15261529
}
@@ -1537,7 +1540,7 @@ ObjectDataHandler::read_ret ObjectDataHandler::read(
15371540
DEBUGT("reading {}~{} from indirect-pin {}~{}, direct-pin {}~{}(off={})",
15381541
ctx.t,
15391542
l_current,
1540-
l_current_end - l_current,
1543+
l_current_end.get_byte_distance<extent_len_t>(l_current),
15411544
pin_key,
15421545
pin_len,
15431546
e_key,
@@ -1549,14 +1552,16 @@ ObjectDataHandler::read_ret ObjectDataHandler::read(
15491552
DEBUGT("reading {}~{} from pin {}~{}",
15501553
ctx.t,
15511554
l_current,
1552-
l_current_end - l_current,
1555+
l_current_end.get_byte_distance<
1556+
extent_len_t>(l_current),
15531557
pin_key,
15541558
pin_len);
15551559
e_key = pin_key;
15561560
e_len = pin_len;
15571561
e_off = 0;
15581562
}
1559-
extent_len_t e_current_off = e_off + l_current - pin_key;
1563+
extent_len_t e_current_off = (l_current + e_off)
1564+
.template get_byte_distance<extent_len_t>(pin_key);
15601565
return ctx.tm.read_pin<ObjectDataBlock>(
15611566
ctx.t,
15621567
std::move(pin)
@@ -1572,7 +1577,7 @@ ObjectDataHandler::read_ret ObjectDataHandler::read(
15721577
bufferptr(
15731578
extent->get_bptr(),
15741579
e_current_off,
1575-
l_current_end - l_current));
1580+
l_current_end.get_byte_distance<extent_len_t>(l_current)));
15761581
l_current = l_current_end;
15771582
return seastar::now();
15781583
}).handle_error_interruptible(
@@ -1637,8 +1642,9 @@ ObjectDataHandler::fiemap_ret ObjectDataHandler::fiemap(
16371642
assert(ret_right > ret_left);
16381643
ret.emplace(
16391644
std::make_pair(
1640-
ret_left - object_data.get_reserved_data_base(),
1641-
ret_right - ret_left
1645+
ret_left.get_byte_distance<uint64_t>(
1646+
object_data.get_reserved_data_base()),
1647+
ret_right.get_byte_distance<uint64_t>(ret_left)
16421648
));
16431649
}
16441650
}
@@ -1716,7 +1722,8 @@ ObjectDataHandler::clone_ret ObjectDataHandler::clone_extents(
17161722
return trans_intr::do_for_each(
17171723
pins,
17181724
[&last_pos, &object_data, ctx, data_base](auto &pin) {
1719-
auto offset = pin->get_key() - data_base;
1725+
auto offset = pin->get_key().template get_byte_distance<
1726+
extent_len_t>(data_base);
17201727
ceph_assert(offset == last_pos);
17211728
auto fut = TransactionManager::alloc_extent_iertr
17221729
::make_ready_future<LBAMappingRef>();

src/crimson/tools/store_nbd/tm_driver.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ seastar::future<bufferlist> TMDriver::read(
117117
for (auto &i: ext_list) {
118118
if (cur != i.first) {
119119
assert(cur < i.first);
120-
blret.append_zero(i.first - cur);
120+
blret.append_zero(i.first.template get_byte_distance<size_t>(cur));
121121
cur = i.first;
122122
}
123123
blret.append(i.second->get_bptr());

src/test/crimson/seastore/test_object_data_handler.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@ TEST_P(object_data_handler_test_t, remap_left) {
632632
auto base = pins.front()->get_key();
633633
int i = 0;
634634
for (auto &pin : pins) {
635-
EXPECT_EQ(pin->get_key() - base, res[i]);
635+
EXPECT_EQ(pin->get_key().get_byte_distance<size_t>(base), res[i]);
636636
i++;
637637
}
638638
read(0, 128<<10);
@@ -666,7 +666,7 @@ TEST_P(object_data_handler_test_t, remap_right) {
666666
auto base = pins.front()->get_key();
667667
int i = 0;
668668
for (auto &pin : pins) {
669-
EXPECT_EQ(pin->get_key() - base, res[i]);
669+
EXPECT_EQ(pin->get_key().get_byte_distance<size_t>(base), res[i]);
670670
i++;
671671
}
672672
read(0, 128<<10);
@@ -699,7 +699,7 @@ TEST_P(object_data_handler_test_t, remap_right_left) {
699699
auto base = pins.front()->get_key();
700700
int i = 0;
701701
for (auto &pin : pins) {
702-
EXPECT_EQ(pin->get_key() - base, res[i]);
702+
EXPECT_EQ(pin->get_key().get_byte_distance<size_t>(base), res[i]);
703703
i++;
704704
}
705705
enable_max_extent_size();
@@ -730,7 +730,7 @@ TEST_P(object_data_handler_test_t, multiple_remap) {
730730
auto base = pins.front()->get_key();
731731
int i = 0;
732732
for (auto &pin : pins) {
733-
EXPECT_EQ(pin->get_key() - base, res[i]);
733+
EXPECT_EQ(pin->get_key().get_byte_distance<size_t>(base), res[i]);
734734
i++;
735735
}
736736
read(0, 128<<10);

src/test/crimson/seastore/test_transaction_manager.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ struct transaction_manager_test_t :
254254
EXPECT_EQ(addr, last);
255255
break;
256256
}
257-
EXPECT_FALSE((iter->first - last).to_byte_offset() > len);
257+
EXPECT_FALSE(iter->first.get_byte_distance<extent_len_t>(last) > len);
258258
last = (iter->first + iter->second.desc.len).checked_to_laddr();
259259
++iter;
260260
}
@@ -1575,7 +1575,8 @@ struct transaction_manager_test_t :
15751575
if (off == 0 || off >= 255) {
15761576
continue;
15771577
}
1578-
auto new_off = laddr_t(off << 10) - last_pin->get_key();
1578+
auto new_off = laddr_t::from_byte_offset(off << 10)
1579+
.get_byte_distance<extent_len_t>(last_pin->get_key());
15791580
auto new_len = last_pin->get_length() - new_off;
15801581
//always remap right extent at new split_point
15811582
auto pin = remap_pin(t, std::move(last_pin), new_off, new_len);
@@ -1674,7 +1675,8 @@ struct transaction_manager_test_t :
16741675
continue;
16751676
}
16761677
empty_transaction = false;
1677-
auto new_off = laddr_t(start_off << 10) - last_rpin->get_key();
1678+
auto new_off = laddr_t::from_byte_offset(start_off << 10)
1679+
.get_byte_distance<extent_len_t>(last_rpin->get_key());
16781680
auto new_len = (end_off - start_off) << 10;
16791681
bufferlist bl;
16801682
bl.append(ceph::bufferptr(ceph::buffer::create(new_len, 0)));

0 commit comments

Comments
 (0)