]> www.infradead.org Git - users/hch/xfsprogs.git/commit
xfs_repair: fix totally broken unit conversion in directory invalidation
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 30 Jan 2020 18:41:01 +0000 (13:41 -0500)
committerEric Sandeen <sandeen@sandeen.net>
Thu, 30 Jan 2020 18:41:01 +0000 (13:41 -0500)
commit3f6bf9529a3357ead365ec32d7cec09818b1ac97
tree652f1c48eed0e19ee112b40e114811145356a6e5
parent4eafc4d3fdf088dd66b64ff6718c716ed84d457f
xfs_repair: fix totally broken unit conversion in directory invalidation

Your humble author forgot that xfs_dablk_t has the same units as
xfs_fileoff_t, and totally screwed up the directory buffer invalidation
loop in dir_binval.  Not only is there an off-by-one error in the loop
conditional, but the unit conversions are wrong.

The pre-5.5 xfs_da_get_buf implementation mostly hides the off-by-one
error because dir_binval turns on "don't complain if no mapping" mode,
but on dirblocksize > fsblocksize filesystems the incorrect units can
cause us to miss invalidating some blocks, which can lead to other
buffer cache errors later.

Fixes: f9c559f4e4fb4 ("xfs_repair: invalidate dirty dir buffers when we zap a directory")
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
repair/phase6.c