Skip to content

Commit 7e24f08

Browse files
committed
crimson/os/seastore: more accurate checks to the paddr types
Signed-off-by: Yingxin Cheng <[email protected]>
1 parent 50cdbe3 commit 7e24f08

File tree

6 files changed

+20
-16
lines changed

6 files changed

+20
-16
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,14 @@ struct FixedKVNode : CachedExtent {
6868
* Upon commit, these now block relative addresses will be interpretted
6969
* against the real final address.
7070
*/
71-
if (!get_paddr().is_absolute()) {
71+
if (get_paddr().is_record_relative()) {
7272
// backend_type_t::SEGMENTED
73-
assert(get_paddr().is_record_relative());
7473
resolve_relative_addrs(
7574
make_record_relative_paddr(0).block_relative_to(get_paddr()));
76-
} // else: backend_type_t::RANDOM_BLOCK
75+
} else {
76+
// backend_type_t::RANDOM_BLOCK
77+
assert(get_paddr().is_absolute());
78+
}
7779
}
7880

7981
void on_delta_write(paddr_t record_block_offset) final {

src/crimson/os/seastore/cache.cc

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
7171
ceph_abort();
7272
}
7373

74-
// any relative paddr must have been on the transaction
75-
assert(!paddr.is_relative());
74+
// any record-relative or delayed paddr must have been on the transaction
75+
assert(paddr.is_absolute());
7676

7777
// absent from transaction
7878
// retiring is not included by the cache hit metrics
@@ -97,6 +97,8 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
9797
void Cache::retire_absent_extent_addr(
9898
Transaction &t, paddr_t paddr, extent_len_t length)
9999
{
100+
assert(paddr.is_absolute());
101+
100102
CachedExtentRef ext;
101103
#ifndef NDEBUG
102104
auto result = t.get_extent(paddr, &ext);
@@ -1461,7 +1463,7 @@ record_t Cache::prepare_record(
14611463
for (auto &i: t.ool_block_list) {
14621464
TRACET("fresh ool extent -- {}", t, *i);
14631465
ceph_assert(i->is_valid());
1464-
assert(!i->is_inline());
1466+
assert(i->get_paddr().is_absolute());
14651467
get_by_ext(efforts.fresh_ool_by_ext,
14661468
i->get_type()).increment(i->get_length());
14671469
if (is_backref_mapped_type(i->get_type())) {
@@ -1975,9 +1977,10 @@ Cache::replay_delta(
19751977
decode(alloc_delta, delta.bl);
19761978
backref_entry_refs_t backref_entries;
19771979
for (auto &alloc_blk : alloc_delta.alloc_blk_ranges) {
1978-
if (alloc_blk.paddr.is_relative()) {
1979-
assert(alloc_blk.paddr.is_record_relative());
1980+
if (alloc_blk.paddr.is_record_relative()) {
19801981
alloc_blk.paddr = record_base.add_relative(alloc_blk.paddr);
1982+
} else {
1983+
ceph_assert(alloc_blk.paddr.is_absolute());
19811984
}
19821985
DEBUG("replay alloc_blk {}~0x{:x} {}, journal_seq: {}",
19831986
alloc_blk.paddr, alloc_blk.len, alloc_blk.laddr, journal_seq);

src/crimson/os/seastore/cache.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1520,7 +1520,7 @@ class Cache : public ExtentTransViewRetriever {
15201520
paddr_t paddr,
15211521
paddr_t key,
15221522
extent_types_t type) {
1523-
assert(!paddr.is_relative());
1523+
assert(paddr.is_absolute());
15241524
auto [iter, inserted] = backref_extents.emplace(paddr, key, type);
15251525
boost::ignore_unused(inserted);
15261526
assert(inserted);

src/crimson/os/seastore/cached_extent.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -760,7 +760,7 @@ class CachedExtent
760760
}
761761

762762
bool is_inline() const {
763-
return poffset.is_relative();
763+
return poffset.is_record_relative();
764764
}
765765

766766
paddr_t get_prior_paddr_and_reset() {

src/crimson/os/seastore/transaction.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -217,28 +217,26 @@ class Transaction {
217217
}
218218

219219
void mark_delayed_extent_ool(CachedExtentRef& ref) {
220+
assert(ref->get_paddr().is_delayed());
220221
ool_block_list.push_back(ref);
221222
}
222223

223224
void update_delayed_ool_extent_addr(LogicalCachedExtentRef& ref,
224225
paddr_t final_addr) {
225-
write_set.erase(*ref);
226226
assert(ref->get_paddr().is_delayed());
227+
assert(final_addr.is_absolute());
228+
write_set.erase(*ref);
227229
ref->set_paddr(final_addr, /* need_update_mapping: */ true);
228-
assert(!ref->get_paddr().is_null());
229-
assert(!ref->is_inline());
230230
write_set.insert(*ref);
231231
}
232232

233233
void mark_allocated_extent_ool(CachedExtentRef& ref) {
234234
assert(ref->get_paddr().is_absolute());
235-
assert(!ref->is_inline());
236235
ool_block_list.push_back(ref);
237236
}
238237

239238
void mark_inplace_rewrite_extent_ool(LogicalCachedExtentRef ref) {
240239
assert(ref->get_paddr().is_absolute_random_block());
241-
assert(!ref->is_inline());
242240
inplace_ool_block_list.push_back(ref);
243241
}
244242

src/crimson/os/seastore/transaction_manager.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,10 @@ TransactionManager::mount()
151151
extent_len_t len,
152152
extent_types_t type,
153153
laddr_t laddr) {
154+
assert(paddr.is_absolute());
154155
if (is_backref_node(type)) {
155156
assert(laddr == L_ADDR_NULL);
156-
assert(backref_key != P_ADDR_NULL);
157+
assert(backref_key.is_absolute() || backref_key == P_ADDR_MIN);
157158
backref_manager->cache_new_backref_extent(paddr, backref_key, type);
158159
cache->update_tree_extents_num(type, 1);
159160
epm->mark_space_used(paddr, len);

0 commit comments

Comments
 (0)