From: Darrick J. Wong Date: Tue, 12 Jul 2022 18:30:33 +0000 (-0500) Subject: mkfs: always use new_diflags2 to initialize new inodes X-Git-Tag: v5.19.0-rc1~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad8a3d7cc897059872e9e9f92ac57cd55d9ba89d;p=thirdparty%2Fxfsprogs-dev.git 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 Reviewed-by: Dave Chinner Signed-off-by: Eric Sandeen --- diff --git a/libxfs/util.c b/libxfs/util.c index d2389198c..5d2383e99 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; }