From: Zhang Song Date: Mon, 18 Aug 2025 11:12:53 +0000 (+0800) Subject: crimson/os/seastore: add retire alloc remarks for backref extents to skip replay... X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1a06854eefe5e2270d175ef9c4f7fa7251430e5f;p=ceph.git crimson/os/seastore: add retire alloc remarks for backref extents to skip replay invalid deltas Fixes: https://tracker.ceph.com/issues/72580 Signed-off-by: Zhang Song --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index d3581498968e..255dd9406be7 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -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); diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index 45eab27c9f8b..976b6a59c39c 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -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); }