xfs: repair problems in CoW forks
authorDarrick J. Wong <djwong@kernel.org>
Fri, 15 Dec 2023 18:03:40 +0000 (10:03 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Fri, 15 Dec 2023 18:03:40 +0000 (10:03 -0800)
commitdbbdbd0086320a026903ca34efedb6abf55230ed
tree829f2db0041ddd0eeee28ed387ab63696ed20c05
parentd12bf8bac87a0d93e6e5fab67f399d1e3d3d5767
xfs: repair problems in CoW forks

Try to repair errors that we see in file CoW forks so that we don't do
stupid things like remap garbage into a file.  There's not a lot we can
do with the COW fork -- the ondisk metadata record only that the COW
staging extents are owned by the refcount btree, which effectively means
that we can't reconstruct this incore structure from scratch.

Actually, this is even worse -- we can't touch written extents, because
those map space that are actively under writeback, and there's not much
to do with delalloc reservations.  Hence we can only detect crosslinked
unwritten extents and fix them by punching out the problematic parts and
replacing them with delalloc extents.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/Makefile
fs/xfs/scrub/cow_repair.c [new file with mode: 0644]
fs/xfs/scrub/off_bitmap.h [new file with mode: 0644]
fs/xfs/scrub/reap.c
fs/xfs/scrub/repair.h
fs/xfs/scrub/scrub.c
fs/xfs/scrub/trace.h