From 1a6d3c4c4c64a0d86d57651c8b906c67ee7aa8c5 Mon Sep 17 00:00:00 2001 From: Zhang Song Date: Thu, 25 May 2023 16:30:44 +0800 Subject: [PATCH] crimson/os/seastore/backref_manager: scan backref entries by journal seq Signed-off-by: Zhang Song --- .../seastore/backref/btree_backref_manager.cc | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/crimson/os/seastore/backref/btree_backref_manager.cc b/src/crimson/os/seastore/backref/btree_backref_manager.cc index ce3f737b21a8e..8be43f5ade5c5 100644 --- a/src/crimson/os/seastore/backref/btree_backref_manager.cc +++ b/src/crimson/os/seastore/backref/btree_backref_manager.cc @@ -397,34 +397,37 @@ BtreeBackrefManager::scan_mapped_space( ); }).si_then([this, &scan_visitor, c, FNAME, block_size] { // traverse alloc-deltas in order - auto &backref_entry_mset = cache.get_backref_entry_mset(); - DEBUGT("scan {} backref entries", c.trans, backref_entry_mset.size()); - for (auto &backref_entry : backref_entry_mset) { - if (backref_entry.laddr == L_ADDR_NULL) { - TRACET("backref entry {}~{} {} free", - c.trans, - backref_entry.paddr, - backref_entry.len, - backref_entry.type); - } else { - TRACET("backref entry {}~{} {}~{} {} used", - c.trans, - backref_entry.paddr, - backref_entry.len, - backref_entry.laddr, - backref_entry.len, - backref_entry.type); - } - ceph_assert(backref_entry.paddr.is_absolute()); - ceph_assert(backref_entry.len > 0 && - backref_entry.len % block_size == 0); - ceph_assert(!is_backref_node(backref_entry.type)); - scan_visitor( - backref_entry.paddr, + auto &backref_entryrefs = cache.get_backref_entryrefs_by_seq(); + for (auto &[seq, refs] : backref_entryrefs) { + boost::ignore_unused(seq); + DEBUGT("scan {} backref entries", c.trans, refs.size()); + for (auto &backref_entry : refs) { + if (backref_entry->laddr == L_ADDR_NULL) { + TRACET("backref entry {}~{} {} free", + c.trans, + backref_entry->paddr, + backref_entry->len, + backref_entry->type); + } else { + TRACET("backref entry {}~{} {}~{} {} used", + c.trans, + backref_entry->paddr, + backref_entry->len, + backref_entry->laddr, + backref_entry->len, + backref_entry->type); + } + ceph_assert(backref_entry->paddr.is_absolute()); + ceph_assert(backref_entry->len > 0 && + backref_entry->len % block_size == 0); + ceph_assert(!is_backref_node(backref_entry->type)); + scan_visitor( + backref_entry->paddr, P_ADDR_NULL, - backref_entry.len, - backref_entry.type, - backref_entry.laddr); + backref_entry->len, + backref_entry->type, + backref_entry->laddr); + } } }).si_then([this, &scan_visitor, block_size, c, FNAME] { BackrefBtree::mapped_space_visitor_t f = -- 2.39.5