From: Darrick J. Wong Date: Tue, 9 Jan 2024 17:39:35 +0000 (-0800) Subject: libxfs: pass flags2 from parent to child when creating files X-Git-Tag: xfs-zoned-old-2024-06-10~298 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=75beb945b64dc48cf569cf86823681ebc8bb42c1;p=users%2Fhch%2Fxfsprogs.git libxfs: pass flags2 from parent to child when creating files When mkfs creates a new file as a child of an existing directory, we should propagate the flags2 field from parent to child like the kernel does. This ensures that mkfs propagates cowextsize hints properly when protofiles are in use. Signed-off-by: Darrick J. Wong --- diff --git a/libxfs/inode.c b/libxfs/inode.c index 148c232fb..1f240de48 100644 --- a/libxfs/inode.c +++ b/libxfs/inode.c @@ -59,6 +59,20 @@ xfs_inode_propagate_flags( ip->i_diflags |= di_flags; } +/* Propagate di_flags2 from a parent inode to a child inode. */ +static void +xfs_inode_inherit_flags2( + struct xfs_inode *ip, + const struct xfs_inode *pip) +{ + if (pip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE) { + ip->i_diflags2 |= XFS_DIFLAG2_COWEXTSIZE; + ip->i_cowextsize = pip->i_cowextsize; + } + if (pip->i_diflags2 & XFS_DIFLAG2_DAX) + ip->i_diflags2 |= XFS_DIFLAG2_DAX; +} + /* * Increment the link count on an inode & log the change. */ @@ -141,6 +155,8 @@ libxfs_icreate( case S_IFDIR: if (pip && (pip->i_diflags & XFS_DIFLAG_ANY)) xfs_inode_propagate_flags(ip, pip); + if (pip && (pip->i_diflags2 & XFS_DIFLAG2_ANY)) + xfs_inode_inherit_flags2(ip, pip); /* FALLTHROUGH */ case S_IFLNK: ip->i_df.if_format = XFS_DINODE_FMT_EXTENTS;