diff mbox series

[2/4] xfs_db/mkfs/xfs_repair: port to use XFS_ICREATE_UNLINKABLE

Message ID 172783103061.4038482.13766864255481933120.stgit@frogsfrogsfrogs (mailing list archive)
State Not Applicable, archived
Headers show
Series [1/4] xfs_db: port the unlink command to use libxfs_droplink | expand

Commit Message

Darrick J. Wong Oct. 2, 2024, 1:25 a.m. UTC
From: Darrick J. Wong <djwong@kernel.org>

Source kernel commit: b11b11e3b7a72606cfef527255a9467537bcaaa5

INIT_XATTRS is overloaded here -- it's set during the creat process when
we think that we're immediately going to set some ACL xattrs to save
time.  However, it's also used by the parent pointers code to enable the
attr fork in preparation to receive ppptr xattrs.  This results in
xfs_has_parent() branches scattered around the codebase to turn on
INIT_XATTRS.

Linkable files are created far more commonly than unlinkable temporary
files or directory tree roots, so we should centralize this logic in
xfs_inode_init.  For the three callers that don't want parent pointers
(online repiar tempfiles, unlinkable tempfiles, rootdir creation) we
provide an UNLINKABLE flag to skip attr fork initialization.

Port these three utilities to use XFS_ICREATE_UNLINKABLE the same as we
did for the kernel.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
 db/iunlink.c    |    2 +-
 mkfs/proto.c    |    5 +++--
 repair/phase6.c |    3 ---
 3 files changed, 4 insertions(+), 6 deletions(-)

Comments

Christoph Hellwig Oct. 2, 2024, 5:53 a.m. UTC | #1
On Tue, Oct 01, 2024 at 06:25:00PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> Source kernel commit: b11b11e3b7a72606cfef527255a9467537bcaaa5

How is this a source kernel commit when it purely touched non-libxfs
code?

The code changes themselves look good, though:

Reviewed-by: Christoph Hellwig <hch@lst.de>
Darrick J. Wong Oct. 2, 2024, 10:50 p.m. UTC | #2
On Tue, Oct 01, 2024 at 10:53:14PM -0700, Christoph Hellwig wrote:
> On Tue, Oct 01, 2024 at 06:25:00PM -0700, Darrick J. Wong wrote:
> > From: Darrick J. Wong <djwong@kernel.org>
> > 
> > Source kernel commit: b11b11e3b7a72606cfef527255a9467537bcaaa5
> 
> How is this a source kernel commit when it purely touched non-libxfs
> code?

scripts gone wild :(

Turns out that editing these free-form commit messages with computer
programs is a bit fraught.

> The code changes themselves look good, though:
> 
> Reviewed-by: Christoph Hellwig <hch@lst.de>

Thanks!

--D
Andrey Albershteyn Oct. 4, 2024, 11:08 a.m. UTC | #3
On 2024-10-02 15:50:29, Darrick J. Wong wrote:
> On Tue, Oct 01, 2024 at 10:53:14PM -0700, Christoph Hellwig wrote:
> > On Tue, Oct 01, 2024 at 06:25:00PM -0700, Darrick J. Wong wrote:
> > > From: Darrick J. Wong <djwong@kernel.org>
> > > 
> > > Source kernel commit: b11b11e3b7a72606cfef527255a9467537bcaaa5
> > 
> > How is this a source kernel commit when it purely touched non-libxfs
> > code?
> 
> scripts gone wild :(

I will drop it then when merging
diff mbox series

Patch

diff --git a/db/iunlink.c b/db/iunlink.c
index fcc824d9a..2ca9096f1 100644
--- a/db/iunlink.c
+++ b/db/iunlink.c
@@ -315,7 +315,7 @@  create_unlinked(
 	struct xfs_icreate_args	args = {
 		.idmap		= libxfs_nop_idmap,
 		.mode		= S_IFREG | 0600,
-		.flags		= XFS_ICREATE_TMPFILE,
+		.flags		= XFS_ICREATE_TMPFILE | XFS_ICREATE_UNLINKABLE,
 	};
 	struct xfs_inode	*ip;
 	struct xfs_trans	*tp;
diff --git a/mkfs/proto.c b/mkfs/proto.c
index 96cb9f854..251e3a9ee 100644
--- a/mkfs/proto.c
+++ b/mkfs/proto.c
@@ -432,8 +432,9 @@  creatproto(
 	xfs_ino_t		ino;
 	int			error;
 
-	if (dp && xfs_has_parent(dp->i_mount))
-		args.flags |= XFS_ICREATE_INIT_XATTRS;
+	/* Root directories cannot be linked to a parent. */
+	if (!dp)
+		args.flags |= XFS_ICREATE_UNLINKABLE;
 
 	/*
 	 * Call the space management code to pick the on-disk inode to be
diff --git a/repair/phase6.c b/repair/phase6.c
index 52e42d4c0..85f122ec7 100644
--- a/repair/phase6.c
+++ b/repair/phase6.c
@@ -909,9 +909,6 @@  mk_orphanage(
 	struct xfs_name		xname;
 	struct xfs_parent_args	*ppargs = NULL;
 
-	if (xfs_has_parent(mp))
-		args.flags |= XFS_ICREATE_INIT_XATTRS;
-
 	i = -libxfs_parent_start(mp, &ppargs);
 	if (i)
 		do_error(_("%d - couldn't allocate parent pointer for %s\n"),