aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2022-07-12 13:30:33 -0500
committerEric Sandeen <sandeen@redhat.com>2022-07-12 13:30:33 -0500
commitad8a3d7cc897059872e9e9f92ac57cd55d9ba89d (patch)
treeedd4540a9213bd0bafde8b31e8687d67e9c417c0
parent42efbb99fb68f0359b492c13792e035c3e056e86 (diff)
downloadxfsprogs-dev-ad8a3d7cc897059872e9e9f92ac57cd55d9ba89d.tar.gz
mkfs: always use new_diflags2 to initialize new inodes
The new_diflags2 field that's set in the inode geometry represent features that we want enabled for /all/ newly created inodes. Unfortunately, mkfs doesn't do that because xfs_flags2diflags2 doesn't read new_diflags2. Change the new_diflags2 logic to match the kernel. Without this fix, the root directory gets created without the DIFLAG2_NREXT64 iflag set, but files created by a protofile /do/ have it turned on. This wasn't an issue with DIFLAG2_BIGTIME because xfs_trans_log_inode quietly turns that on whenever possible. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
-rw-r--r--libxfs/util.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libxfs/util.c b/libxfs/util.c
index d2389198ca..5d2383e996 100644
--- a/libxfs/util.c
+++ b/libxfs/util.c
@@ -286,8 +286,10 @@ libxfs_init_new_inode(
if (xfs_has_v3inodes(ip->i_mount)) {
VFS_I(ip)->i_version = 1;
- ip->i_diflags2 = pip ? ip->i_mount->m_ino_geo.new_diflags2 :
- xfs_flags2diflags2(ip, fsx->fsx_xflags);
+ ip->i_diflags2 = ip->i_mount->m_ino_geo.new_diflags2;
+ if (!pip)
+ ip->i_diflags2 = xfs_flags2diflags2(ip,
+ fsx->fsx_xflags);
ip->i_crtime = VFS_I(ip)->i_mtime; /* struct copy */
ip->i_cowextsize = pip ? 0 : fsx->fsx_cowextsize;
}