]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: add retire alloc remarks for backref extents to skip replay...
authorZhang Song <zhangsong02@qianxin.com>
Mon, 18 Aug 2025 11:12:53 +0000 (19:12 +0800)
committerZhang Song <zhangsong02@qianxin.com>
Mon, 18 Aug 2025 11:17:40 +0000 (19:17 +0800)
Fixes: https://tracker.ceph.com/issues/72580
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/seastore_types.h

index d3581498968eb5068f309a809c2a4001da050fea..255dd9406be76022462835fc61e7cd07112470e9 100644 (file)
@@ -1436,6 +1436,14 @@ record_t Cache::prepare_record(
          extent->get_length(),
          extent->get_type()));
     } else if (is_backref_node(extent->get_type())) {
+      // The retire alloc deltas are used to identify the invalid backref extent
+      // deltas during replay when using CircularBoundedJournal, see
+      // build_paddr_seq_map in CBJournal::replay().
+      rel_delta.alloc_blk_ranges.emplace_back(
+       alloc_blk_t::create_retire(
+         extent->get_paddr(),
+         extent->get_length(),
+         extent->get_type()));
       remove_backref_extent(extent->get_paddr());
     } else {
       ERRORT("Got unexpected extent type: {}", t, *extent);
index 45eab27c9f8b1252126aedb7030400b31f019447..976b6a59c39c4fc810c1050538a2aa3e4beb4454 100644 (file)
@@ -2107,6 +2107,7 @@ struct alloc_blk_t {
       extent_len_t len,
       extent_types_t type) {
     assert(is_backref_mapped_type(type) ||
+          is_backref_node(type) ||
           is_retired_placeholder_type(type));
     return alloc_blk_t(paddr, L_ADDR_NULL, len, type);
   }