diff mbox series

[6/6] mkfs: always use new_diflags2 to initialize new inodes

Message ID 165644938793.1089996.3898370820373975650.stgit@magnolia (mailing list archive)
State Accepted
Headers show
Series xfsprogs: random fixes | expand

Commit Message

Darrick J. Wong June 28, 2022, 8:49 p.m. UTC
From: Darrick J. Wong <djwong@kernel.org>

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>
---
 libxfs/util.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Dave Chinner June 28, 2022, 11:01 p.m. UTC | #1
On Tue, Jun 28, 2022 at 01:49:47PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> 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>
> ---
>  libxfs/util.c |    6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> 
> diff --git a/libxfs/util.c b/libxfs/util.c
> index d2389198..5d2383e9 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;
>  	}

Looks good.

Reviewed-by: Dave Chinner <dchinner@redhat.com>
diff mbox series

Patch

diff --git a/libxfs/util.c b/libxfs/util.c
index d2389198..5d2383e9 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;
 	}