mbox series

[GIT,PULL,10/22] xfs: detect incorrect gaps in refcount btree

Message ID 168127094663.417736.1589396657136631142.stg-ugh@frogsfrogsfrogs (mailing list archive)
State Deferred, archived
Headers show
Series [GIT,PULL,1/22] xfs: design documentation for online fsck | expand

Pull-request

git://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/scrub-detect-refcount-gaps-6.4_2023-04-11

Message

Darrick J. Wong April 12, 2023, 3:47 a.m. UTC
Hi Dave,

Please pull this branch with changes for xfs.

As usual, I did a test-merge with the main upstream branch as of a few
minutes ago, and didn't see any conflicts.  Please let me know if you
encounter any problems.

--D

The following changes since commit 2bea8df0a52b05bc0dddd54e950ae37c83533b03:

xfs: always scrub record/key order of interior records (2023-04-11 19:00:09 -0700)

are available in the Git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/scrub-detect-refcount-gaps-6.4_2023-04-11

for you to fetch changes up to 7ac14fa2bd22e99a06ae16382b394f697cfe2b8a:

xfs: ensure that all metadata and data blocks are not cow staging extents (2023-04-11 19:00:12 -0700)

----------------------------------------------------------------
xfs: detect incorrect gaps in refcount btree [v24.5]

The next few patchsets address a deficiency in scrub that I found while
QAing the refcount btree scrubber.  If there's a gap between refcount
records, we need to cross-reference that gap with the reverse mappings
to ensure that there are no overlapping records in the rmap btree.  If
we find any, then the refcount btree is not consistent.  This is not a
property that is specific to the refcount btree; they all need to have
this sort of keyspace scanning logic to detect inconsistencies.

To do this accurately, we need to be able to scan the keyspace of a
btree (which we already do) to be able to tell the caller if the
keyspace is empty, sparse, or fully covered by records.  The first few
patches add the keyspace scanner to the generic btree code, along with
the ability to mask off parts of btree keys because when we scan the
rmapbt, we only care about space usage, not the owners.

The final patch closes the scanning gap in the refcountbt scanner.

v23.1: create helpers for the key extraction and comparison functions,
improve documentation, and eliminate the ->mask_key indirect
calls

Signed-off-by: Darrick J. Wong <djwong@kernel.org>

----------------------------------------------------------------
Darrick J. Wong (6):
xfs: refactor converting btree irec to btree key
xfs: refactor ->diff_two_keys callsites
xfs: replace xfs_btree_has_record with a general keyspace scanner
xfs: implement masked btree key comparisons for _has_records scans
xfs: check the reference counts of gaps in the refcount btree
xfs: ensure that all metadata and data blocks are not cow staging extents

fs/xfs/libxfs/xfs_alloc.c          |  11 +-
fs/xfs/libxfs/xfs_alloc.h          |   4 +-
fs/xfs/libxfs/xfs_alloc_btree.c    |  28 ++++-
fs/xfs/libxfs/xfs_bmap_btree.c     |  19 +++-
fs/xfs/libxfs/xfs_btree.c          | 208 +++++++++++++++++++++++++++----------
fs/xfs/libxfs/xfs_btree.h          | 141 ++++++++++++++++++++++++-
fs/xfs/libxfs/xfs_ialloc_btree.c   |  22 +++-
fs/xfs/libxfs/xfs_refcount.c       |  11 +-
fs/xfs/libxfs/xfs_refcount.h       |   4 +-
fs/xfs/libxfs/xfs_refcount_btree.c |  21 +++-
fs/xfs/libxfs/xfs_rmap.c           |  15 ++-
fs/xfs/libxfs/xfs_rmap.h           |   4 +-
fs/xfs/libxfs/xfs_rmap_btree.c     |  61 ++++++++---
fs/xfs/libxfs/xfs_types.h          |  12 +++
fs/xfs/scrub/agheader.c            |   5 +
fs/xfs/scrub/alloc.c               |   7 +-
fs/xfs/scrub/bmap.c                |  11 +-
fs/xfs/scrub/btree.c               |  24 ++---
fs/xfs/scrub/ialloc.c              |   2 +-
fs/xfs/scrub/inode.c               |   1 +
fs/xfs/scrub/refcount.c            | 124 ++++++++++++++++++++--
fs/xfs/scrub/rmap.c                |   6 +-
fs/xfs/scrub/scrub.h               |   2 +
23 files changed, 612 insertions(+), 131 deletions(-)