mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-17 22:05:08 +00:00
xfs: metadata files can have xattrs if metadir is enabled
If parent pointers are enabled, then metadata files will store parent pointers in xattrs, just like files in the user visible directory tree. Therefore, scrub and repair need to handle attr forks for metadata files on metadir filesystems. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
13af229ee0
commit
91fb4232be
@ -1245,12 +1245,6 @@ xchk_metadata_inode_forks(
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* They also should never have extended attributes. */
|
||||
if (xfs_inode_hasattr(sc->ip)) {
|
||||
xchk_ino_set_corrupt(sc, sc->ip->i_ino);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Invoke the data fork scrubber. */
|
||||
error = xchk_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_BMBTD);
|
||||
if (error || (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT))
|
||||
@ -1267,6 +1261,21 @@ xchk_metadata_inode_forks(
|
||||
xchk_ino_set_corrupt(sc, sc->ip->i_ino);
|
||||
}
|
||||
|
||||
/*
|
||||
* Metadata files can only have extended attributes on metadir
|
||||
* filesystems, either for parent pointers or for actual xattr data.
|
||||
*/
|
||||
if (xfs_inode_hasattr(sc->ip)) {
|
||||
if (!xfs_has_metadir(sc->mp)) {
|
||||
xchk_ino_set_corrupt(sc, sc->ip->i_ino);
|
||||
return 0;
|
||||
}
|
||||
|
||||
error = xchk_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_BMBTA);
|
||||
if (error || (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT))
|
||||
return error;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1082,7 +1082,12 @@ xrep_metadata_inode_forks(
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/* Make sure the attr fork looks ok before we delete it. */
|
||||
/*
|
||||
* Metadata files can only have extended attributes on metadir
|
||||
* filesystems, either for parent pointers or for actual xattr data.
|
||||
* For a non-metadir filesystem, make sure the attr fork looks ok
|
||||
* before we delete it.
|
||||
*/
|
||||
if (xfs_inode_hasattr(sc->ip)) {
|
||||
error = xrep_metadata_inode_subtype(sc, XFS_SCRUB_TYPE_BMBTA);
|
||||
if (error)
|
||||
@ -1098,8 +1103,11 @@ xrep_metadata_inode_forks(
|
||||
return error;
|
||||
}
|
||||
|
||||
/* Clear the attr forks since metadata shouldn't have that. */
|
||||
if (xfs_inode_hasattr(sc->ip)) {
|
||||
/*
|
||||
* Metadata files on non-metadir filesystems cannot have attr forks,
|
||||
* so clear them now.
|
||||
*/
|
||||
if (xfs_inode_hasattr(sc->ip) && !xfs_has_metadir(sc->mp)) {
|
||||
if (!dirty) {
|
||||
dirty = true;
|
||||
xfs_trans_ijoin(sc->tp, sc->ip, 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user