]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: more accurate checks to the paddr types
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 23 Apr 2025 06:38:43 +0000 (14:38 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 25 Apr 2025 01:20:27 +0000 (09:20 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/btree/fixed_kv_node.h
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/cached_extent.h
src/crimson/os/seastore/transaction.h
src/crimson/os/seastore/transaction_manager.cc

index 56c3eae1742ff7b0a91e3db8384c37ec51b0a9f4..12cdd340d618a1921e1c8287bf751e419139ae01 100644 (file)
@@ -68,12 +68,14 @@ struct FixedKVNode : CachedExtent {
      * Upon commit, these now block relative addresses will be interpretted
      * against the real final address.
      */
-    if (!get_paddr().is_absolute()) {
+    if (get_paddr().is_record_relative()) {
       // backend_type_t::SEGMENTED
-      assert(get_paddr().is_record_relative());
       resolve_relative_addrs(
        make_record_relative_paddr(0).block_relative_to(get_paddr()));
-    } // else: backend_type_t::RANDOM_BLOCK
+    } else {
+      // backend_type_t::RANDOM_BLOCK
+      assert(get_paddr().is_absolute());
+    }
   }
 
   void on_delta_write(paddr_t record_block_offset) final {
index 3c224137f0dc7d882522fc8d313bf8fdfccb2526..b9f13e3525d03b01b3468ec439f293ceefa48cdb 100644 (file)
@@ -71,8 +71,8 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
     ceph_abort();
   }
 
-  // any relative paddr must have been on the transaction
-  assert(!paddr.is_relative());
+  // any record-relative or delayed paddr must have been on the transaction
+  assert(paddr.is_absolute());
 
   // absent from transaction
   // retiring is not included by the cache hit metrics
@@ -97,6 +97,8 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
 void Cache::retire_absent_extent_addr(
   Transaction &t, paddr_t paddr, extent_len_t length)
 {
+  assert(paddr.is_absolute());
+
   CachedExtentRef ext;
 #ifndef NDEBUG
   auto result = t.get_extent(paddr, &ext);
@@ -1461,7 +1463,7 @@ record_t Cache::prepare_record(
   for (auto &i: t.ool_block_list) {
     TRACET("fresh ool extent -- {}", t, *i);
     ceph_assert(i->is_valid());
-    assert(!i->is_inline());
+    assert(i->get_paddr().is_absolute());
     get_by_ext(efforts.fresh_ool_by_ext,
                i->get_type()).increment(i->get_length());
     if (is_backref_mapped_type(i->get_type())) {
@@ -1975,9 +1977,10 @@ Cache::replay_delta(
     decode(alloc_delta, delta.bl);
     backref_entry_refs_t backref_entries;
     for (auto &alloc_blk : alloc_delta.alloc_blk_ranges) {
-      if (alloc_blk.paddr.is_relative()) {
-       assert(alloc_blk.paddr.is_record_relative());
+      if (alloc_blk.paddr.is_record_relative()) {
        alloc_blk.paddr = record_base.add_relative(alloc_blk.paddr);
+      } else {
+        ceph_assert(alloc_blk.paddr.is_absolute());
       }
       DEBUG("replay alloc_blk {}~0x{:x} {}, journal_seq: {}",
        alloc_blk.paddr, alloc_blk.len, alloc_blk.laddr, journal_seq);
index 8e597cafd1160d0884df080e2767dbd8ada840f6..b52db400778520d306470422a5c73f2c711f8cf3 100644 (file)
@@ -1520,7 +1520,7 @@ private:
     paddr_t paddr,
     paddr_t key,
     extent_types_t type) {
-    assert(!paddr.is_relative());
+    assert(paddr.is_absolute());
     auto [iter, inserted] = backref_extents.emplace(paddr, key, type);
     boost::ignore_unused(inserted);
     assert(inserted);
index d7b47d3cae1260081b7e751b83ee1926224dbd95..ee4b098ffaa0e2d3502765a6daf863eb2341e56c 100644 (file)
@@ -760,7 +760,7 @@ public:
   }
 
   bool is_inline() const {
-    return poffset.is_relative();
+    return poffset.is_record_relative();
   }
 
   paddr_t get_prior_paddr_and_reset() {
index e217c54f79ddc8fc76788747ff9b84129001b251..9de630daa90a0221df510becc41165a23a304e0d 100644 (file)
@@ -217,28 +217,26 @@ public:
   }
 
   void mark_delayed_extent_ool(CachedExtentRef& ref) {
+    assert(ref->get_paddr().is_delayed());
     ool_block_list.push_back(ref);
   }
 
   void update_delayed_ool_extent_addr(LogicalCachedExtentRef& ref,
                                       paddr_t final_addr) {
-    write_set.erase(*ref);
     assert(ref->get_paddr().is_delayed());
+    assert(final_addr.is_absolute());
+    write_set.erase(*ref);
     ref->set_paddr(final_addr, /* need_update_mapping: */ true);
-    assert(!ref->get_paddr().is_null());
-    assert(!ref->is_inline());
     write_set.insert(*ref);
   }
 
   void mark_allocated_extent_ool(CachedExtentRef& ref) {
     assert(ref->get_paddr().is_absolute());
-    assert(!ref->is_inline());
     ool_block_list.push_back(ref);
   }
 
   void mark_inplace_rewrite_extent_ool(LogicalCachedExtentRef ref) {
     assert(ref->get_paddr().is_absolute_random_block());
-    assert(!ref->is_inline());
     inplace_ool_block_list.push_back(ref);
   }
 
index dd77577315e9df632159bd1c3c49c99068e34138..ac11813f31381809d4994a4d0b368235f457ce76 100644 (file)
@@ -151,9 +151,10 @@ TransactionManager::mount()
             extent_len_t len,
             extent_types_t type,
             laddr_t laddr) {
+          assert(paddr.is_absolute());
           if (is_backref_node(type)) {
             assert(laddr == L_ADDR_NULL);
-           assert(backref_key != P_ADDR_NULL);
+           assert(backref_key.is_absolute() || backref_key == P_ADDR_MIN);
             backref_manager->cache_new_backref_extent(paddr, backref_key, type);
             cache->update_tree_extents_num(type, 1);
             epm->mark_space_used(paddr, len);