tag name | scrub-fixes_2019-02-04 (6b9773be3df35cc8f9599067957336e33f71075e) |
tag date | 2019-02-04 09:31:34 -0800 |
tagged by | Darrick J. Wong <darrick.wong@oracle.com> |
tagged object | commit 1f8459099f... |
xfs: inode scrubber fixes
Here are fixes for some problems with the inode btree scrub code, namely
that the existing code does not handle the case where a single inode
cluster is mapped by multiple inobt records.
Patch 1 corrects a condition where we needed to clamp the number of
inodes checked for a given inobt record to the inode chunk size.
Patches 2-3 move the inobt record alignment checks to a separate
function and enhance the function to check that when we have more than
one inobt record per cluster we actually check that *all* of the
necessary records are present and in the correct order. This patch
includes fixes for the finobt alignment false positives recently
reported by Chandan.
Patches 4-6 reorganize the inobt free data checks to deal with the
"multiple inobt records per icluster" situation. In restructuring the
code to do so, we also rename variables and functions to be less
confusing about what they're there for. We also fix the 'is the inode
free?' check to calculate dinode buffer offsets correctly in the
"multiple inobt records per icluster" situation.
Patch 7 aborts the xattr scrub loop if there are pending fatal signals.
Patch 8 checks that for any directory or attr fork there are no extent
maps that stretch beyond what a xfs_dablk_t can map.