mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
xfs: fix di_metatype field of inodes that won't load
Make sure that the di_metatype field is at least set plausibly so that later scrubbers could set the real type. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
aec2eb7da8
commit
5dab2daa8a
@ -443,8 +443,13 @@ xchk_dinode(
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
if (!xfs_dinode_is_metadir(dip) && dip->di_metatype)
|
||||
xchk_ino_set_corrupt(sc, ino);
|
||||
if (xfs_dinode_is_metadir(dip)) {
|
||||
if (be16_to_cpu(dip->di_metatype) >= XFS_METAFILE_MAX)
|
||||
xchk_ino_set_corrupt(sc, ino);
|
||||
} else {
|
||||
if (dip->di_metatype != 0)
|
||||
xchk_ino_set_corrupt(sc, ino);
|
||||
}
|
||||
|
||||
if (dip->di_mode == 0 && sc->ip)
|
||||
xchk_ino_set_corrupt(sc, ino);
|
||||
|
@ -526,8 +526,12 @@ xrep_dinode_nlinks(
|
||||
return;
|
||||
}
|
||||
|
||||
if (!xfs_dinode_is_metadir(dip))
|
||||
if (xfs_dinode_is_metadir(dip)) {
|
||||
if (be16_to_cpu(dip->di_metatype) >= XFS_METAFILE_MAX)
|
||||
dip->di_metatype = cpu_to_be16(XFS_METAFILE_UNKNOWN);
|
||||
} else {
|
||||
dip->di_metatype = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fix any conflicting flags that the verifiers complain about. */
|
||||
|
Loading…
Reference in New Issue
Block a user