xfs: Expose init_xattrs in xfs_create_tmpfile
authorAllison Henderson <allison.henderson@oracle.com>
Mon, 22 Apr 2024 16:47:43 +0000 (09:47 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 23 Apr 2024 14:46:57 +0000 (07:46 -0700)
Tmp files are used as part of rename operations and will need attr forks
initialized for parent pointers.  Expose the init_xattrs parameter to
the calling function to initialize the fork.

Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_inode.c
fs/xfs/xfs_inode.h
fs/xfs/xfs_iops.c

index 3c843223b4edd37bc4f569f5df2cf8100636b644..060e4e767b51b8cc4d3694bce615f603c06d0640 100644 (file)
@@ -1185,6 +1185,7 @@ xfs_create_tmpfile(
        struct mnt_idmap        *idmap,
        struct xfs_inode        *dp,
        umode_t                 mode,
+       bool                    init_xattrs,
        struct xfs_inode        **ipp)
 {
        struct xfs_mount        *mp = dp->i_mount;
@@ -1225,7 +1226,7 @@ xfs_create_tmpfile(
        error = xfs_dialloc(&tp, dp->i_ino, mode, &ino);
        if (!error)
                error = xfs_init_new_inode(idmap, tp, dp, ino, mode,
-                               0, 0, prid, false, &ip);
+                               0, 0, prid, init_xattrs, &ip);
        if (error)
                goto out_trans_cancel;
 
@@ -3037,7 +3038,7 @@ xfs_rename_alloc_whiteout(
        int                     error;
 
        error = xfs_create_tmpfile(idmap, dp, S_IFCHR | WHITEOUT_MODE,
-                                  &tmpfile);
+                                  false, &tmpfile);
        if (error)
                return error;
 
index a6da1ab8ab13624a0ffc09d24bf915269eb20990..04a91e312993b1b8496d4f0c03c215dc86da701d 100644 (file)
@@ -522,7 +522,7 @@ int         xfs_create(struct mnt_idmap *idmap,
                           umode_t mode, dev_t rdev, bool need_xattr,
                           struct xfs_inode **ipp);
 int            xfs_create_tmpfile(struct mnt_idmap *idmap,
-                          struct xfs_inode *dp, umode_t mode,
+                          struct xfs_inode *dp, umode_t mode, bool init_xattrs,
                           struct xfs_inode **ipp);
 int            xfs_remove(struct xfs_inode *dp, struct xfs_name *name,
                           struct xfs_inode *ip);
index 659fd10c0cda6259b597f546075306629bc44826..d32322f9ecde3a7ed7e0273de674bf526c2cfa16 100644 (file)
@@ -201,7 +201,7 @@ xfs_generic_create(
                                xfs_create_need_xattr(dir, default_acl, acl),
                                &ip);
        } else {
-               error = xfs_create_tmpfile(idmap, XFS_I(dir), mode, &ip);
+               error = xfs_create_tmpfile(idmap, XFS_I(dir), mode, false, &ip);
        }
        if (unlikely(error))
                goto out_free_acl;