Two issues have been encounted with xfs_repair and badly corrupted
directories.
1. A huge size (inode di_size) can cause malloc which will fail.
Patch dir_size_check.patch checks for a valid directory size
and if it's bad, junks the directory. The di_size for a dir
only counts the data blocks being used, not all the other
associated metadata. This is limited to 32GB by the
XFS_DIR2_LEAF_OFFSET value in XFS. Anything greater than this
must be invalid.
2. An update a while ago to xfs_repair attempts to fix invalid
".." entries for subdirectories where there is a valid parent
with the appropriate entry. It was a partial fix that never
did the full job, especially if the subdirectory was short-
form or it has already been processed.
Patch fix_dir_rebuild_without_dotdot_entry.patch creates a
post-processing queue after the main scan to update any
directories with an invalid ".." entry.
Both these patches sit on top of the dinode.patch that has been
posted out for review previously.
dinode.patch
Description: Text Data
dir_size_check.patch
Description: Text Data
fix_dir_rebuild_without_dotdot_entry.patch
Description: Text Data
|