Skip to content

Commit fc16b16

Browse files
authored
Merge pull request ceph#59182 from zhscn/wip-4k-laddr
crimson/os/seastore: make laddr_t block aligned Reviewed-by: Yingxin Cheng <[email protected]>
2 parents f7dafdd + 86627f8 commit fc16b16

37 files changed

+1350
-328
lines changed

src/crimson/os/seastore/backref/backref_tree_node.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ using BackrefNode = FixedKVNode<paddr_t>;
1717

1818
struct backref_map_val_t {
1919
extent_len_t len = 0; ///< length of extents
20-
laddr_t laddr = 0; ///< logical address of extents
20+
laddr_t laddr = L_ADDR_MIN; ///< logical address of extents
2121
extent_types_t type = extent_types_t::ROOT;
2222

2323
backref_map_val_t() = default;
@@ -36,7 +36,7 @@ std::ostream& operator<<(std::ostream &out, const backref_map_val_t& val);
3636

3737
struct backref_map_val_le_t {
3838
extent_len_le_t len = init_extent_len_le(0);
39-
laddr_le_t laddr = laddr_le_t(0);
39+
laddr_le_t laddr = laddr_le_t(L_ADDR_MIN);
4040
extent_types_le_t type = 0;
4141

4242
backref_map_val_le_t() = default;

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/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/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 {

0 commit comments

Comments
 (0)