[PATCH 00/10] xfsprogs August 2015 patchbomb

Darrick J. Wong
2015-08-15T01:43:47Z

Hi all,

This is a rollup of various fixes for xfsprogs 4.2.0-rc1.

The first patch fixes the dir3 data block verifier to use the standard
read verifiers during readahead. Just a resync with the kernel, since
nothing in xfsprogs uses libxfs readahead.

The second patch fixes xfs_db's inode command not to crash when the
user tries to navigate to a corrupt inode.

The third patch fixes a bug in xfs_repair wherein if xfs_repair fixes
a broken xattr block and later decides to unmap the block, the
"repaired" flag inadvertently prohibits the unmapping of that block.

The fourth patch fixes sign handling mistakes when dealing with the
b_error field in a xfs_buf -- error values in this field are negative,
so all checks and assignments must be as well.

The fifth patch forces prefetch to mark corrupt bmbt blocks UNCHECKED
so that the regular bmbt examination will fix the bad CRC if it
doesn't take any other action against the block. Without this, a
corruption in the unused area will trigger a kernel error yet never
get fixed by repair.

The sixth patch fixes an obscure problem in xfs_repair -- when
prefetch is enabled and there exists a directory with multiple
corrupted blocks, it's possible that both corrupt blocks will be read
in and marked UNCHECKED. If either the first corrupt block is so
badly damaged so as to cause the directory to be erased, or if the
second corrupt block is an index block (which is automatically
unmapped when the directory is rebuilt), the second block's buffer
will remain UNCHECKED. If the block is then allocated to something
else (say lost+found), the next readbuf of the block will fail because
nobody clears UNCHECKED and CRCs are only set during writebufr, which
only happens when repair finishes its examination.

Patch 7 implements a 'reflink' and 'dedupe' command in xfs_io. This
will be used in future xfstests to test reflink and dedupe features of
btrfs and xfs filesystems.

Patch 8 fixes xfs_db/blocktrash to not fail write verification when
corrupting a block and allows trashing of log and symlink blocks.

Patch 9 enhances the blocktrash command with a '-z' option that
trashes the block at the top of the cursor stack and doesn't require
blockget to have been run.

Patch 10 implements blockget for v5 filesystems. This is a second try
at a previous patch which didn't quite catch all the new magic numbers
and had some problems iterating directory index data.

I've tested these xfsprogs changes against the for-next branch as of
8/03. The rmap/reflink patches will be dealt with separately.

Scary rewound github repo with everything attached:
https://github.com/djwong/xfsprogs

Comments and questions are, as always, welcome.

--D