linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: djwong@kernel.org
Cc: linux-xfs@vger.kernel.org
Subject: [PATCH 13/32] xfs: read and write metadata inode directory
Date: Sun, 31 Dec 2023 13:09:37 -0800	[thread overview]
Message-ID: <170404845074.1760491.14974500736996975266.stgit@frogsfrogsfrogs> (raw)
In-Reply-To: <170404844790.1760491.7084433932242910678.stgit@frogsfrogsfrogs>

From: Darrick J. Wong <djwong@kernel.org>

Plumb in the bits we need to look up metadata inode numbers from the
metadata inode directory and save them back.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
 fs/xfs/libxfs/xfs_imeta.c      |  563 ++++++++++++++++++++++++++++++++++++++++
 fs/xfs/libxfs/xfs_imeta.h      |   17 +
 fs/xfs/libxfs/xfs_inode_util.c |    3 
 fs/xfs/libxfs/xfs_trans_resv.c |    8 -
 fs/xfs/xfs_imeta_utils.c       |   77 +++++
 fs/xfs/xfs_trace.h             |   50 +++-
 6 files changed, 704 insertions(+), 14 deletions(-)


diff --git a/fs/xfs/libxfs/xfs_imeta.c b/fs/xfs/libxfs/xfs_imeta.c
index 38f79827b9354..5c5a801386a29 100644
--- a/fs/xfs/libxfs/xfs_imeta.c
+++ b/fs/xfs/libxfs/xfs_imeta.c
@@ -24,6 +24,8 @@
 #include "xfs_da_btree.h"
 #include "xfs_trans_space.h"
 #include "xfs_ag.h"
+#include "xfs_dir2.h"
+#include "xfs_dir2_priv.h"
 
 /*
  * Metadata File Management
@@ -44,9 +46,16 @@
  * this structure must be passed to xfs_imeta_end_update to free resources that
  * cannot be freed during the transaction.
  *
- * Right now we only support callers passing in the predefined metadata inode
- * paths; the goal is that callers will some day locate metadata inodes based
- * on path lookups into a metadata directory structure.
+ * When the metadata directory tree (metadir) feature is enabled, we can create
+ * a complex directory tree in which to store metadata inodes.  Inodes within
+ * the metadata directory tree should have the "metadata" inode flag set to
+ * prevent them from being exposed to the outside world.
+ *
+ * Callers are not expected to take the IOLOCK of metadata directories.  They
+ * are expected to take the ILOCK of any inode in the metadata directory tree
+ * (just like the regular to synchronize access to that inode.  It is not
+ * necessary to take the MMAPLOCK since metadata inodes should never be exposed
+ * to user space.
  */
 
 /* Static metadata inode paths */
@@ -62,6 +71,11 @@ XFS_IMETA_DEFINE_PATH(XFS_IMETA_USRQUOTA,	usrquota_path);
 XFS_IMETA_DEFINE_PATH(XFS_IMETA_GRPQUOTA,	grpquota_path);
 XFS_IMETA_DEFINE_PATH(XFS_IMETA_PRJQUOTA,	prjquota_path);
 
+const struct xfs_imeta_path XFS_IMETA_METADIR = {
+	.im_depth = 0,
+	.im_ftype = XFS_DIR3_FT_DIR,
+};
+
 /* Are these two paths equal? */
 STATIC bool
 xfs_imeta_path_compare(
@@ -119,6 +133,10 @@ static const struct xfs_imeta_sbmap {
 		.path	= &XFS_IMETA_PRJQUOTA,
 		.offset	= offsetof(struct xfs_sb, sb_pquotino),
 	},
+	{
+		.path	= &XFS_IMETA_METADIR,
+		.offset	= offsetof(struct xfs_sb, sb_metadirino),
+	},
 	{ NULL, 0 },
 };
 
@@ -288,6 +306,521 @@ xfs_imeta_sb_link(
 	return 0;
 }
 
+/* Functions for storing and retrieving metadata directory inode values. */
+
+static inline void
+xfs_imeta_set_xname(
+	struct xfs_name			*xname,
+	const struct xfs_imeta_path	*path,
+	unsigned int			path_idx,
+	unsigned char			ftype)
+{
+	xname->name = (const unsigned char *)path->im_path[path_idx];
+	xname->len = strlen(path->im_path[path_idx]);
+	xname->type = ftype;
+}
+
+/*
+ * Look up the inode number and filetype for an exact name in a directory.
+ * Caller must hold ILOCK_EXCL.
+ */
+static inline int
+xfs_imeta_dir_lookup(
+	struct xfs_trans	*tp,
+	struct xfs_inode	*dp,
+	struct xfs_name		*xname,
+	xfs_ino_t		*ino)
+{
+	struct xfs_da_args	args = {
+		.trans		= tp,
+		.dp		= dp,
+		.geo		= dp->i_mount->m_dir_geo,
+		.name		= xname->name,
+		.namelen	= xname->len,
+		.hashval	= xfs_dir2_hashname(dp->i_mount, xname),
+		.whichfork	= XFS_DATA_FORK,
+		.op_flags	= XFS_DA_OP_OKNOENT,
+		.owner		= dp->i_ino,
+	};
+	bool			isblock, isleaf;
+	int			error;
+
+	if (xfs_is_shutdown(dp->i_mount))
+		return -EIO;
+
+	if (dp->i_df.if_format == XFS_DINODE_FMT_LOCAL) {
+		error = xfs_dir2_sf_lookup(&args);
+		goto out_unlock;
+	}
+
+	/* dir2 functions require that the data fork is loaded */
+	error = xfs_iread_extents(tp, dp, XFS_DATA_FORK);
+	if (error)
+		goto out_unlock;
+
+	error = xfs_dir2_isblock(&args, &isblock);
+	if (error)
+		goto out_unlock;
+
+	if (isblock) {
+		error = xfs_dir2_block_lookup(&args);
+		goto out_unlock;
+	}
+
+	error = xfs_dir2_isleaf(&args, &isleaf);
+	if (error)
+		goto out_unlock;
+
+	if (isleaf) {
+		error = xfs_dir2_leaf_lookup(&args);
+		goto out_unlock;
+	}
+
+	error = xfs_dir2_node_lookup(&args);
+
+out_unlock:
+	if (error == -EEXIST)
+		error = 0;
+	if (error)
+		return error;
+
+	*ino = args.inumber;
+	xname->type = args.filetype;
+	return 0;
+}
+
+/*
+ * Given a parent directory @dp and a metadata inode path component @xname,
+ * Look up the inode number in the directory, returning it in @ino.
+ * @xname.type must match the directory entry's ftype.
+ *
+ * Caller must hold ILOCK_EXCL.
+ */
+static inline int
+xfs_imeta_dir_lookup_component(
+	struct xfs_trans	*tp,
+	struct xfs_inode	*dp,
+	struct xfs_name		*xname,
+	xfs_ino_t		*ino)
+{
+	int			type_wanted = xname->type;
+	int			error;
+
+	if (!S_ISDIR(VFS_I(dp)->i_mode))
+		return -EFSCORRUPTED;
+
+	error = xfs_imeta_dir_lookup(tp, dp, xname, ino);
+	if (error)
+		return error;
+	if (!xfs_verify_ino(dp->i_mount, *ino))
+		return -EFSCORRUPTED;
+	if (type_wanted != XFS_DIR3_FT_UNKNOWN && xname->type != type_wanted)
+		return -EFSCORRUPTED;
+
+	trace_xfs_imeta_dir_lookup(dp, xname, *ino);
+	return 0;
+}
+
+/*
+ * Traverse a metadata directory tree path, returning the inode corresponding
+ * to the parent of the last path component.  If any of the path components do
+ * not exist, return -ENOENT.  Caller must supply a transaction to avoid
+ * livelocks on btree cycles.
+ *
+ * @dp is returned without any locks held.
+ */
+int
+xfs_imeta_dir_parent(
+	struct xfs_trans		*tp,
+	const struct xfs_imeta_path	*path,
+	struct xfs_inode		**dpp)
+{
+	struct xfs_name			xname;
+	struct xfs_mount		*mp = tp->t_mountp;
+	struct xfs_inode		*dp = NULL;
+	xfs_ino_t			ino;
+	unsigned int			i;
+	int				error;
+
+	/* Caller wanted the root, we're done! */
+	if (path->im_depth == 0)
+		goto out;
+
+	/* No metadata directory means no parent. */
+	if (mp->m_metadirip == NULL)
+		return -ENOENT;
+
+	/* Grab a new reference to the metadir root dir. */
+	error = xfs_imeta_iget(tp, mp->m_metadirip->i_ino, XFS_DIR3_FT_DIR,
+			&dp);
+	if (error)
+		return error;
+
+	for (i = 0; i < path->im_depth - 1; i++) {
+		struct xfs_inode	*ip = NULL;
+
+		xfs_ilock(dp, XFS_ILOCK_EXCL);
+
+		/* Look up the name in the current directory. */
+		xfs_imeta_set_xname(&xname, path, i, XFS_DIR3_FT_DIR);
+		error = xfs_imeta_dir_lookup_component(tp, dp, &xname, &ino);
+		if (error)
+			goto out_rele;
+
+		/*
+		 * Grab the child inode while we still have the parent
+		 * directory locked.
+		 */
+		error = xfs_imeta_iget(tp, ino, XFS_DIR3_FT_DIR, &ip);
+		if (error)
+			goto out_rele;
+
+		xfs_iunlock(dp, XFS_ILOCK_EXCL);
+		xfs_imeta_irele(dp);
+		dp = ip;
+	}
+
+out:
+	*dpp = dp;
+	return 0;
+
+out_rele:
+	xfs_iunlock(dp, XFS_ILOCK_EXCL);
+	xfs_imeta_irele(dp);
+	return error;
+}
+
+/*
+ * Look up a metadata inode from the metadata directory.  If the last path
+ * component doesn't exist, return NULLFSINO.  If any other part of the path
+ * does not exist, return -ENOENT so we can distinguish the two.
+ */
+STATIC int
+xfs_imeta_dir_lookup_int(
+	struct xfs_trans		*tp,
+	const struct xfs_imeta_path	*path,
+	xfs_ino_t			*inop)
+{
+	struct xfs_name			xname;
+	struct xfs_inode		*dp = NULL;
+	xfs_ino_t			ino;
+	int				error;
+
+	/* metadir ino is recorded in superblock */
+	if (xfs_imeta_path_compare(path, &XFS_IMETA_METADIR))
+		return xfs_imeta_sb_lookup(tp->t_mountp, path, inop);
+
+	ASSERT(path->im_depth > 0);
+
+	/* Find the parent of the last path component. */
+	error = xfs_imeta_dir_parent(tp, path, &dp);
+	if (error)
+		return error;
+
+	xfs_ilock(dp, XFS_ILOCK_EXCL);
+
+	/* Look up the name in the current directory. */
+	xfs_imeta_set_xname(&xname, path, path->im_depth - 1, path->im_ftype);
+	error = xfs_imeta_dir_lookup_component(tp, dp, &xname, &ino);
+	switch (error) {
+	case 0:
+		*inop = ino;
+		break;
+	case -ENOENT:
+		*inop = NULLFSINO;
+		error = 0;
+		break;
+	}
+
+	xfs_iunlock(dp, XFS_ILOCK_EXCL);
+	xfs_imeta_irele(dp);
+	return error;
+}
+
+/*
+ * Load all the metadata inode pointers that are cached in the in-core
+ * superblock but live somewhere in the metadata directory tree.
+ */
+STATIC int
+xfs_imeta_dir_mount(
+	struct xfs_trans		*tp)
+{
+	struct xfs_mount		*mp = tp->t_mountp;
+	const struct xfs_imeta_sbmap	*p;
+	xfs_ino_t			*sb_inop;
+	int				err2;
+	int				error = 0;
+
+	for (p = xfs_imeta_sbmaps; p->path && p->path->im_depth > 0; p++) {
+		if (p->path == &XFS_IMETA_METADIR)
+			continue;
+		sb_inop = xfs_imeta_sbmap_to_inop(mp, p);
+		err2 = xfs_imeta_dir_lookup_int(tp, p->path, sb_inop);
+		if (err2 == -ENOENT) {
+			*sb_inop = NULLFSINO;
+			continue;
+		}
+		if (!error && err2)
+			error = err2;
+	}
+
+	return error;
+}
+
+/* Set up an inode to be recognized as a metadata directory inode. */
+void
+xfs_imeta_set_iflag(
+	struct xfs_trans	*tp,
+	struct xfs_inode	*ip)
+{
+	VFS_I(ip)->i_mode &= ~0777;
+	VFS_I(ip)->i_uid = GLOBAL_ROOT_UID;
+	VFS_I(ip)->i_gid = GLOBAL_ROOT_GID;
+	ip->i_projid = 0;
+	ip->i_diflags |= (XFS_DIFLAG_IMMUTABLE | XFS_DIFLAG_SYNC |
+			  XFS_DIFLAG_NOATIME | XFS_DIFLAG_NODUMP |
+			  XFS_DIFLAG_NODEFRAG);
+	if (S_ISDIR(VFS_I(ip)->i_mode))
+		ip->i_diflags |= XFS_DIFLAG_NOSYMLINKS;
+	ip->i_diflags2 &= ~XFS_DIFLAG2_DAX;
+	ip->i_diflags2 |= XFS_DIFLAG2_METADIR;
+	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
+}
+
+
+/* Clear the metadata directory inode flag. */
+void
+xfs_imeta_clear_iflag(
+	struct xfs_trans	*tp,
+	struct xfs_inode	*ip)
+{
+	ASSERT(xfs_is_metadir_inode(ip));
+	ASSERT(VFS_I(ip)->i_nlink == 0);
+
+	ip->i_diflags2 &= ~XFS_DIFLAG2_METADIR;
+	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
+}
+/*
+ * Create a new metadata inode accessible via the given metadata directory path.
+ * Callers must ensure that the directory entry does not already exist; a new
+ * one will be created.
+ */
+STATIC int
+xfs_imeta_dir_create(
+	struct xfs_imeta_update		*upd,
+	umode_t				mode)
+{
+	struct xfs_icreate_args		args = {
+		.pip			= upd->dp,
+		.nlink			= S_ISDIR(mode) ? 2 : 1,
+	};
+	struct xfs_name			xname;
+	struct xfs_dir_update		du = {
+		.dp			= upd->dp,
+		.name			= &xname,
+		.ppargs			= upd->ppargs,
+	};
+	struct xfs_mount		*mp = upd->mp;
+	xfs_ino_t			*sb_inop;
+	xfs_ino_t			ino;
+	unsigned int			resblks;
+	int				error;
+
+	ASSERT(xfs_isilocked(upd->dp, XFS_ILOCK_EXCL));
+
+	/* metadir ino is recorded in superblock; only mkfs gets to do this */
+	if (xfs_imeta_path_compare(upd->path, &XFS_IMETA_METADIR)) {
+		error = xfs_imeta_sb_create(upd, mode);
+		if (error)
+			return error;
+
+		/* Set the metadata iflag, initialize directory. */
+		xfs_imeta_set_iflag(upd->tp, upd->ip);
+		return xfs_dir_init(upd->tp, upd->ip, upd->ip);
+	}
+
+	ASSERT(upd->path->im_depth > 0);
+
+	xfs_icreate_args_rootfile(&args, mp, mode, xfs_has_parent(mp));
+
+	/* Check that the name does not already exist in the directory. */
+	xfs_imeta_set_xname(&xname, upd->path, upd->path->im_depth - 1,
+			XFS_DIR3_FT_UNKNOWN);
+	error = xfs_imeta_dir_lookup_component(upd->tp, upd->dp, &xname, &ino);
+	switch (error) {
+	case -ENOENT:
+		break;
+	case 0:
+		error = -EEXIST;
+		fallthrough;
+	default:
+		return error;
+	}
+
+	/*
+	 * A newly created regular or special file just has one directory
+	 * entry pointing to them, but a directory also the "." entry
+	 * pointing to itself.
+	 */
+	error = xfs_dialloc(&upd->tp, upd->dp->i_ino, mode, &ino);
+	if (error)
+		return error;
+	error = xfs_icreate(upd->tp, ino, &args, &upd->ip);
+	if (error)
+		return error;
+	du.ip = upd->ip;
+	xfs_imeta_set_iflag(upd->tp, upd->ip);
+	upd->ip_locked = true;
+
+	/*
+	 * Join the directory inode to the transaction.  We do not do it
+	 * earlier because xfs_dialloc rolls the transaction.
+	 */
+	xfs_trans_ijoin(upd->tp, upd->dp, 0);
+
+	/* Create the entry. */
+	if (S_ISDIR(args.mode))
+		resblks = xfs_mkdir_space_res(mp, xname.len);
+	else
+		resblks = xfs_create_space_res(mp, xname.len);
+	xname.type = xfs_mode_to_ftype(args.mode);
+
+	trace_xfs_imeta_dir_try_create(upd);
+
+	error = xfs_dir_create_child(upd->tp, resblks, &du);
+	if (error)
+		return error;
+
+	/* Metadir files are not accounted to quota. */
+
+	trace_xfs_imeta_dir_create(upd);
+
+	/* Update the in-core superblock value if there is one. */
+	sb_inop = xfs_imeta_path_to_sb_inop(mp, upd->path);
+	if (sb_inop)
+		*sb_inop = ino;
+	return 0;
+}
+
+/*
+ * Remove the given entry from the metadata directory and drop the link count
+ * of the metadata inode.
+ */
+STATIC int
+xfs_imeta_dir_unlink(
+	struct xfs_imeta_update		*upd)
+{
+	struct xfs_name			xname;
+	struct xfs_dir_update		du = {
+		.dp			= upd->dp,
+		.name			= &xname,
+		.ip			= upd->ip,
+		.ppargs			= upd->ppargs,
+	};
+	struct xfs_mount		*mp = upd->mp;
+	xfs_ino_t			*sb_inop;
+	xfs_ino_t			ino;
+	unsigned int			resblks;
+	int				error;
+
+	ASSERT(xfs_isilocked(upd->dp, XFS_ILOCK_EXCL));
+	ASSERT(xfs_isilocked(upd->ip, XFS_ILOCK_EXCL));
+
+	/* Metadata directory root cannot be unlinked. */
+	if (xfs_imeta_path_compare(upd->path, &XFS_IMETA_METADIR)) {
+		ASSERT(0);
+		return -EFSCORRUPTED;
+	}
+
+	ASSERT(upd->path->im_depth > 0);
+
+	/* Look up the name in the current directory. */
+	xfs_imeta_set_xname(&xname, upd->path, upd->path->im_depth - 1,
+			xfs_mode_to_ftype(VFS_I(upd->ip)->i_mode));
+	error = xfs_imeta_dir_lookup_component(upd->tp, upd->dp, &xname, &ino);
+	switch (error) {
+	case 0:
+		if (ino != upd->ip->i_ino)
+			error = -ENOENT;
+		break;
+	case -ENOENT:
+		error = -EFSCORRUPTED;
+		break;
+	}
+	if (error)
+		return error;
+
+	resblks = xfs_remove_space_res(mp, xname.len);
+	error = xfs_dir_remove_child(upd->tp, resblks, &du);
+	if (error)
+		return error;
+
+	trace_xfs_imeta_dir_unlink(upd);
+
+	/* Update the in-core superblock value if there is one. */
+	sb_inop = xfs_imeta_path_to_sb_inop(mp, upd->path);
+	if (sb_inop)
+		*sb_inop = NULLFSINO;
+	return 0;
+}
+
+/* Set the given path in the metadata directory to point to an inode. */
+STATIC int
+xfs_imeta_dir_link(
+	struct xfs_imeta_update		*upd)
+{
+	struct xfs_name			xname;
+	struct xfs_dir_update		du = {
+		.dp			= upd->dp,
+		.name			= &xname,
+		.ip			= upd->ip,
+		.ppargs			= upd->ppargs,
+	};
+	struct xfs_mount		*mp = upd->mp;
+	xfs_ino_t			*sb_inop;
+	xfs_ino_t			ino;
+	unsigned int			resblks;
+	int				error;
+
+	ASSERT(xfs_isilocked(upd->dp, XFS_ILOCK_EXCL));
+	ASSERT(xfs_isilocked(upd->ip, XFS_ILOCK_EXCL));
+
+	/* Metadata directory root cannot be linked. */
+	if (xfs_imeta_path_compare(upd->path, &XFS_IMETA_METADIR)) {
+		ASSERT(0);
+		return -EFSCORRUPTED;
+	}
+
+	ASSERT(upd->path->im_depth > 0);
+
+	/* Look up the name in the current directory. */
+	xfs_imeta_set_xname(&xname, upd->path, upd->path->im_depth - 1,
+			xfs_mode_to_ftype(VFS_I(upd->ip)->i_mode));
+	error = xfs_imeta_dir_lookup_component(upd->tp, upd->dp, &xname, &ino);
+	switch (error) {
+	case -ENOENT:
+		break;
+	case 0:
+		error = -EEXIST;
+		fallthrough;
+	default:
+		return error;
+	}
+
+	resblks = xfs_link_space_res(mp, xname.len);
+	error = xfs_dir_add_child(upd->tp, resblks, &du);
+	if (error)
+		return error;
+
+	trace_xfs_imeta_dir_link(upd);
+
+	/* Update the in-core superblock value if there is one. */
+	sb_inop = xfs_imeta_path_to_sb_inop(mp, upd->path);
+	if (sb_inop)
+		*sb_inop = upd->ip->i_ino;
+	return 0;
+}
+
 /* General functions for managing metadata inode pointers */
 
 /*
@@ -318,7 +851,13 @@ xfs_imeta_lookup(
 
 	ASSERT(xfs_imeta_path_check(path));
 
-	error = xfs_imeta_sb_lookup(mp, path, &ino);
+	if (xfs_has_metadir(mp)) {
+		error = xfs_imeta_dir_lookup_int(tp, path, &ino);
+		if (error == -ENOENT)
+			return -EFSCORRUPTED;
+	} else {
+		error = xfs_imeta_sb_lookup(mp, path, &ino);
+	}
 	if (error)
 		return error;
 
@@ -350,13 +889,17 @@ xfs_imeta_create(
 	umode_t				mode,
 	struct xfs_inode		**ipp)
 {
+	struct xfs_mount		*mp = upd->mp;
 	int				error;
 
 	ASSERT(xfs_imeta_path_check(upd->path));
 
 	*ipp = NULL;
 
-	error = xfs_imeta_sb_create(upd, mode);
+	if (xfs_has_metadir(mp))
+		error = xfs_imeta_dir_create(upd, mode);
+	else
+		error = xfs_imeta_sb_create(upd, mode);
 	*ipp = upd->ip;
 	return error;
 }
@@ -406,7 +949,10 @@ xfs_imeta_unlink(
 	ASSERT(xfs_imeta_path_check(upd->path));
 	ASSERT(xfs_imeta_verify(upd->mp, upd->ip->i_ino));
 
-	error = xfs_imeta_sb_unlink(upd);
+	if (xfs_has_metadir(upd->mp))
+		error = xfs_imeta_dir_unlink(upd);
+	else
+		error = xfs_imeta_sb_unlink(upd);
 	if (error)
 		return error;
 
@@ -432,6 +978,8 @@ xfs_imeta_link(
 {
 	ASSERT(xfs_imeta_path_check(upd->path));
 
+	if (xfs_has_metadir(upd->mp))
+		return xfs_imeta_dir_link(upd);
 	return xfs_imeta_sb_link(upd);
 }
 
@@ -462,5 +1010,8 @@ int
 xfs_imeta_mount(
 	struct xfs_trans	*tp)
 {
+	if (xfs_has_metadir(tp->t_mountp))
+		return xfs_imeta_dir_mount(tp);
+
 	return 0;
 }
diff --git a/fs/xfs/libxfs/xfs_imeta.h b/fs/xfs/libxfs/xfs_imeta.h
index 60e0f6a6c134a..b8e360bbdfbe1 100644
--- a/fs/xfs/libxfs/xfs_imeta.h
+++ b/fs/xfs/libxfs/xfs_imeta.h
@@ -13,6 +13,7 @@
 #define XFS_IMETA_DEFINE_PATH(name, path) \
 const struct xfs_imeta_path name = { \
 	.im_path = (path), \
+	.im_ftype = XFS_DIR3_FT_REG_FILE, \
 	.im_depth = ARRAY_SIZE(path), \
 }
 
@@ -23,6 +24,9 @@ struct xfs_imeta_path {
 
 	/* Number of strings in path. */
 	uint8_t			im_depth;
+
+	/* Expected file type. */
+	uint8_t			im_ftype;
 };
 
 /* Cleanup widget for metadata inode creation and deletion. */
@@ -32,9 +36,16 @@ struct xfs_imeta_update {
 
 	const struct xfs_imeta_path *path;
 
+	/* Parent pointer update context */
+	struct xfs_parent_args	*ppargs;
+
+	/* Parent directory */
+	struct xfs_inode	*dp;
+
 	/* Metadata inode */
 	struct xfs_inode	*ip;
 
+	unsigned int		dp_locked:1;
 	unsigned int		ip_locked:1;
 };
 
@@ -54,9 +65,15 @@ extern const struct xfs_imeta_path XFS_IMETA_RTSUMMARY;
 extern const struct xfs_imeta_path XFS_IMETA_USRQUOTA;
 extern const struct xfs_imeta_path XFS_IMETA_GRPQUOTA;
 extern const struct xfs_imeta_path XFS_IMETA_PRJQUOTA;
+extern const struct xfs_imeta_path XFS_IMETA_METADIR;
 
 int xfs_imeta_lookup(struct xfs_trans *tp, const struct xfs_imeta_path *path,
 		xfs_ino_t *ino);
+int xfs_imeta_dir_parent(struct xfs_trans *tp,
+		const struct xfs_imeta_path *path, struct xfs_inode **dpp);
+
+void xfs_imeta_set_iflag(struct xfs_trans *tp, struct xfs_inode *ip);
+void xfs_imeta_clear_iflag(struct xfs_trans *tp, struct xfs_inode *ip);
 
 int xfs_imeta_create(struct xfs_imeta_update *upd, umode_t mode,
 		struct xfs_inode **ipp);
diff --git a/fs/xfs/libxfs/xfs_inode_util.c b/fs/xfs/libxfs/xfs_inode_util.c
index 2f190b875c7f8..7833530102d1c 100644
--- a/fs/xfs/libxfs/xfs_inode_util.c
+++ b/fs/xfs/libxfs/xfs_inode_util.c
@@ -23,6 +23,7 @@
 #include "xfs_ag.h"
 #include "xfs_iunlink_item.h"
 #include "xfs_inode_item.h"
+#include "xfs_imeta.h"
 
 uint16_t
 xfs_flags2diflags(
@@ -649,6 +650,8 @@ xfs_droplink(
 	if (inode->i_nlink)
 		return 0;
 
+	if (xfs_is_metadir_inode(ip))
+		xfs_imeta_clear_iflag(tp, ip);
 	return xfs_iunlink(tp, ip);
 }
 
diff --git a/fs/xfs/libxfs/xfs_trans_resv.c b/fs/xfs/libxfs/xfs_trans_resv.c
index a0545daf039c7..0840d5000bf97 100644
--- a/fs/xfs/libxfs/xfs_trans_resv.c
+++ b/fs/xfs/libxfs/xfs_trans_resv.c
@@ -1121,7 +1121,10 @@ xfs_calc_imeta_create_resv(
 	unsigned int		ret;
 
 	ret = xfs_calc_buf_res(1, mp->m_sb.sb_sectsize);
-	ret += resp->tr_create.tr_logres;
+	if (xfs_has_metadir(mp))
+		ret += max(resp->tr_create.tr_logres, resp->tr_mkdir.tr_logres);
+	else
+		ret += resp->tr_create.tr_logres;
 	return ret;
 }
 
@@ -1131,6 +1134,9 @@ xfs_calc_imeta_create_count(
 	struct xfs_mount	*mp,
 	struct xfs_trans_resv	*resp)
 {
+	if (xfs_has_metadir(mp))
+		return max(resp->tr_create.tr_logcount,
+			   resp->tr_mkdir.tr_logcount);
 	return resp->tr_create.tr_logcount;
 }
 
diff --git a/fs/xfs/xfs_imeta_utils.c b/fs/xfs/xfs_imeta_utils.c
index 65a3aea49a5fc..a8ff46a3d502e 100644
--- a/fs/xfs/xfs_imeta_utils.c
+++ b/fs/xfs/xfs_imeta_utils.c
@@ -22,6 +22,7 @@
 #include "xfs_imeta.h"
 #include "xfs_imeta_utils.h"
 #include "xfs_trace.h"
+#include "xfs_parent.h"
 
 /* Initialize a metadata update structure. */
 static inline int
@@ -30,10 +31,33 @@ xfs_imeta_init(
 	const struct xfs_imeta_path	*path,
 	struct xfs_imeta_update		*upd)
 {
+	struct xfs_trans		*tp;
+	int				error;
+
 	memset(upd, 0, sizeof(struct xfs_imeta_update));
 	upd->mp = mp;
 	upd->path = path;
-	return 0;
+
+	if (!xfs_has_metadir(mp))
+		return 0;
+
+	/*
+	 * Find the parent of the last path component.  If the parent path does
+	 * not exist, we consider this corruption because paths are supposed
+	 * to exist.  For example, if the path is /quota/user, we require that
+	 * /quota already exists.
+	 */
+	error = xfs_trans_alloc_empty(mp, &tp);
+	if (error)
+		return error;
+	error = xfs_imeta_dir_parent(tp, upd->path, &upd->dp);
+	xfs_trans_cancel(tp);
+	if (error == -ENOENT)
+		return -EFSCORRUPTED;
+	if (error)
+		return error;
+
+	return xfs_parent_start(mp, &upd->ppargs);
 }
 
 /*
@@ -48,11 +72,25 @@ xfs_imeta_teardown(
 {
 	trace_xfs_imeta_teardown(upd, error);
 
+	if (upd->ppargs) {
+		xfs_parent_finish(upd->mp, upd->ppargs);
+		upd->ppargs = NULL;
+	}
+
 	if (upd->ip) {
 		if (upd->ip_locked)
 			xfs_iunlock(upd->ip, XFS_ILOCK_EXCL);
 		upd->ip_locked = false;
 	}
+
+	if (upd->dp) {
+		if (upd->dp_locked)
+			xfs_iunlock(upd->dp, XFS_ILOCK_EXCL);
+		upd->dp_locked = false;
+
+		xfs_imeta_irele(upd->dp);
+		upd->dp = NULL;
+	}
 }
 
 /*
@@ -83,6 +121,15 @@ xfs_imeta_start_create(
 	if (error)
 		goto out_teardown;
 
+	/*
+	 * Lock the parent directory if there is one.  We can't ijoin it to
+	 * the transaction until after the child file has been created.
+	 */
+	if (upd->dp) {
+		xfs_ilock(upd->dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT);
+		upd->dp_locked = true;
+	}
+
 	trace_xfs_imeta_start_create(upd);
 	return 0;
 out_teardown:
@@ -111,10 +158,30 @@ xfs_imeta_start_dir_update(
 
 	upd->ip = ip;
 
-	error = xfs_trans_alloc_inode(upd->ip, tr_resv, resblks, 0, false,
-			&upd->tp);
-	if (error)
-		goto out_teardown;
+	if (upd->dp) {
+		int			nospace_error = 0;
+
+		error = xfs_trans_alloc_dir(upd->dp, tr_resv, upd->ip,
+				&resblks, &upd->tp, &nospace_error);
+		if (error)
+			goto out_teardown;
+		if (!resblks) {
+			/* We don't allow reservationless updates. */
+			xfs_trans_cancel(upd->tp);
+			upd->tp = NULL;
+			xfs_iunlock(upd->dp, XFS_ILOCK_EXCL);
+			xfs_iunlock(upd->ip, XFS_ILOCK_EXCL);
+			error = nospace_error;
+			goto out_teardown;
+		}
+
+		upd->dp_locked = true;
+	} else {
+		error = xfs_trans_alloc_inode(upd->ip, tr_resv, resblks, 0,
+				false, &upd->tp);
+		if (error)
+			goto out_teardown;
+	}
 
 	upd->ip_locked = true;
 	return 0;
diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
index 12f68507d7a74..17f364e1b9613 100644
--- a/fs/xfs/xfs_trace.h
+++ b/fs/xfs/xfs_trace.h
@@ -5090,16 +5090,19 @@ DECLARE_EVENT_CLASS(xfs_imeta_update_class,
 	TP_ARGS(upd),
 	TP_STRUCT__entry(
 		__field(dev_t, dev)
+		__field(xfs_ino_t, dp_ino)
 		__field(xfs_ino_t, ino)
 		__string(fname, xfs_imeta_lastpath(upd))
 	),
 	TP_fast_assign(
 		__entry->dev = upd->mp->m_super->s_dev;
+		__entry->dp_ino = upd->dp ? upd->dp->i_ino : NULLFSINO;
 		__entry->ino = upd->ip ? upd->ip->i_ino : NULLFSINO;
 		__assign_str(fname, xfs_imeta_lastpath(upd));
 	),
-	TP_printk("dev %d:%d fname '%s' ino 0x%llx",
+	TP_printk("dev %d:%d dp 0x%llx fname '%s' ino 0x%llx",
 		  MAJOR(__entry->dev), MINOR(__entry->dev),
+		  __entry->dp_ino,
 		  __get_str(fname),
 		  __entry->ino)
 )
@@ -5116,24 +5119,31 @@ DEFINE_IMETA_UPDATE_EVENT(xfs_imeta_update_cancel);
 DEFINE_IMETA_UPDATE_EVENT(xfs_imeta_sb_create);
 DEFINE_IMETA_UPDATE_EVENT(xfs_imeta_sb_unlink);
 DEFINE_IMETA_UPDATE_EVENT(xfs_imeta_sb_link);
+DEFINE_IMETA_UPDATE_EVENT(xfs_imeta_dir_try_create);
+DEFINE_IMETA_UPDATE_EVENT(xfs_imeta_dir_create);
+DEFINE_IMETA_UPDATE_EVENT(xfs_imeta_dir_unlink);
+DEFINE_IMETA_UPDATE_EVENT(xfs_imeta_dir_link);
 
 DECLARE_EVENT_CLASS(xfs_imeta_update_error_class,
 	TP_PROTO(const struct xfs_imeta_update *upd, int error),
 	TP_ARGS(upd, error),
 	TP_STRUCT__entry(
 		__field(dev_t, dev)
+		__field(xfs_ino_t, dp_ino)
 		__field(xfs_ino_t, ino)
 		__field(int, error)
 		__string(fname, xfs_imeta_lastpath(upd))
 	),
 	TP_fast_assign(
 		__entry->dev = upd->mp->m_super->s_dev;
+		__entry->dp_ino = upd->dp ? upd->dp->i_ino : NULLFSINO;
 		__entry->ino = upd->ip ? upd->ip->i_ino : NULLFSINO;
 		__entry->error = error;
 		__assign_str(fname, xfs_imeta_lastpath(upd));
 	),
-	TP_printk("dev %d:%d fname '%s' ino 0x%llx error %d",
+	TP_printk("dev %d:%d dp 0x%llx fname '%s' ino 0x%llx error %d",
 		  MAJOR(__entry->dev), MINOR(__entry->dev),
+		  __entry->dp_ino,
 		  __get_str(fname),
 		  __entry->ino,
 		  __entry->error)
@@ -5145,6 +5155,42 @@ DEFINE_EVENT(xfs_imeta_update_error_class, name, \
 	TP_ARGS(upd, error))
 DEFINE_IMETA_UPDATE_ERROR_EVENT(xfs_imeta_teardown);
 
+DECLARE_EVENT_CLASS(xfs_imeta_dir_class,
+	TP_PROTO(struct xfs_inode *dp, struct xfs_name *name,
+		 xfs_ino_t ino),
+	TP_ARGS(dp, name, ino),
+	TP_STRUCT__entry(
+		__field(dev_t, dev)
+		__field(xfs_ino_t, dp_ino)
+		__field(xfs_ino_t, ino)
+		__field(int, ftype)
+		__field(int, namelen)
+		__dynamic_array(char, name, name->len)
+	),
+	TP_fast_assign(
+		__entry->dev = VFS_I(dp)->i_sb->s_dev;
+		__entry->dp_ino = dp->i_ino;
+		__entry->ino = ino,
+		__entry->ftype = name->type;
+		__entry->namelen = name->len;
+		memcpy(__get_str(name), name->name, name->len);
+	),
+	TP_printk("dev %d:%d dir 0x%llx type %s name '%.*s' ino 0x%llx",
+		  MAJOR(__entry->dev), MINOR(__entry->dev),
+		  __entry->dp_ino,
+		  __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),
+		  __entry->namelen,
+		  __get_str(name),
+		  __entry->ino)
+)
+
+#define DEFINE_IMETA_DIR_EVENT(name) \
+DEFINE_EVENT(xfs_imeta_dir_class, name, \
+	TP_PROTO(struct xfs_inode *dp, struct xfs_name *name, \
+		 xfs_ino_t ino), \
+	TP_ARGS(dp, name, ino))
+DEFINE_IMETA_DIR_EVENT(xfs_imeta_dir_lookup);
+
 #endif /* _TRACE_XFS_H */
 
 #undef TRACE_INCLUDE_PATH


  parent reply	other threads:[~2023-12-31 21:09 UTC|newest]

Thread overview: 632+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-31 18:23 [NYE PATCHRIVER 3/4] xfs: modernize the realtime volume Darrick J. Wong
2023-12-31 19:34 ` [PATCHSET v2.0 01/15] xfs: hoist inode operations to libxfs Darrick J. Wong
2023-12-31 21:01   ` [PATCH 01/21] xfs: move inode copy-on-write predicates to xfs_inode.[ch] Darrick J. Wong
2023-12-31 21:01   ` [PATCH 02/21] xfs: hoist extent size helpers to libxfs Darrick J. Wong
2023-12-31 21:01   ` [PATCH 03/21] xfs: hoist inode flag conversion functions " Darrick J. Wong
2023-12-31 21:01   ` [PATCH 04/21] xfs: hoist project id get/set " Darrick J. Wong
2023-12-31 21:02   ` [PATCH 05/21] xfs: pack icreate initialization parameters into a separate structure Darrick J. Wong
2023-12-31 21:02   ` [PATCH 06/21] xfs: implement atime updates in xfs_trans_ichgtime Darrick J. Wong
2023-12-31 21:02   ` [PATCH 07/21] xfs: use xfs_trans_ichgtime to set times when allocating inode Darrick J. Wong
2023-12-31 21:02   ` [PATCH 08/21] xfs: split new inode creation into two pieces Darrick J. Wong
2023-12-31 21:03   ` [PATCH 09/21] xfs: hoist new inode initialization functions to libxfs Darrick J. Wong
2023-12-31 21:03   ` [PATCH 10/21] xfs: push xfs_icreate_args creation out of xfs_create* Darrick J. Wong
2023-12-31 21:03   ` [PATCH 11/21] xfs: wrap inode creation dqalloc calls Darrick J. Wong
2023-12-31 21:03   ` [PATCH 12/21] xfs: hoist xfs_iunlink to libxfs Darrick J. Wong
2023-12-31 21:04   ` [PATCH 13/21] xfs: hoist xfs_{bump,drop}link " Darrick J. Wong
2023-12-31 21:04   ` [PATCH 14/21] xfs: create libxfs helper to link a new inode into a directory Darrick J. Wong
2023-12-31 21:04   ` [PATCH 15/21] xfs: create libxfs helper to link an existing " Darrick J. Wong
2023-12-31 21:04   ` [PATCH 16/21] xfs: hoist inode free function to libxfs Darrick J. Wong
2023-12-31 21:05   ` [PATCH 17/21] xfs: create libxfs helper to remove an existing inode/name from a directory Darrick J. Wong
2023-12-31 21:05   ` [PATCH 18/21] xfs: create libxfs helper to exchange two directory entries Darrick J. Wong
2023-12-31 21:05   ` [PATCH 19/21] xfs: create libxfs helper to rename " Darrick J. Wong
2023-12-31 21:05   ` [PATCH 20/21] xfs: move dirent update hooks to xfs_dir2.c Darrick J. Wong
2023-12-31 21:06   ` [PATCH 21/21] xfs: get rid of trivial rename helpers Darrick J. Wong
2023-12-31 19:35 ` [PATCHSET v2.0 02/15] xfs: metadata inode directories Darrick J. Wong
2023-12-31 21:06   ` [PATCH 01/32] xfs: don't use the incore struct xfs_sb for offsets into struct xfs_dsb Darrick J. Wong
2023-12-31 21:06   ` [PATCH 02/32] xfs: create imeta abstractions to get and set metadata inodes Darrick J. Wong
2023-12-31 21:07   ` [PATCH 03/32] xfs: create transaction reservations for metadata inode operations Darrick J. Wong
2023-12-31 21:07   ` [PATCH 04/32] xfs: refactor the v4 group/project inode pointer switch Darrick J. Wong
2023-12-31 21:07   ` [PATCH 05/32] xfs: convert quota file creation to use imeta methods Darrick J. Wong
2023-12-31 21:07   ` [PATCH 06/32] xfs: iget for metadata inodes Darrick J. Wong
2023-12-31 21:08   ` [PATCH 07/32] xfs: define the on-disk format for the metadir feature Darrick J. Wong
2023-12-31 21:08   ` [PATCH 08/32] xfs: update imeta transaction reservations for metadir Darrick J. Wong
2023-12-31 21:08   ` [PATCH 09/32] xfs: load metadata directory root at mount time Darrick J. Wong
2023-12-31 21:08   ` [PATCH 10/32] xfs: convert metadata inode lookup keys to use paths Darrick J. Wong
2023-12-31 21:09   ` [PATCH 11/32] xfs: enforce metadata inode flag Darrick J. Wong
2023-12-31 21:09   ` [PATCH 12/32] xfs: allow deletion of metadata directory files Darrick J. Wong
2023-12-31 21:09   ` Darrick J. Wong [this message]
2023-12-31 21:09   ` [PATCH 14/32] xfs: ensure metadata directory paths exist before creating files Darrick J. Wong
2023-12-31 21:10   ` [PATCH 15/32] xfs: disable the agi rotor for metadata inodes Darrick J. Wong
2023-12-31 21:10   ` [PATCH 16/32] xfs: hide metadata inodes from everyone because they are special Darrick J. Wong
2023-12-31 21:10   ` [PATCH 17/32] xfs: advertise metadata directory feature Darrick J. Wong
2023-12-31 21:10   ` [PATCH 18/32] xfs: allow bulkstat to return metadata directories Darrick J. Wong
2023-12-31 21:11   ` [PATCH 19/32] xfs: enable creation of dynamically allocated metadir path structures Darrick J. Wong
2023-12-31 21:11   ` [PATCH 20/32] xfs: don't count metadata directory files to quota Darrick J. Wong
2023-12-31 21:11   ` [PATCH 21/32] xfs: adjust xfs_bmap_add_attrfork for metadir Darrick J. Wong
2023-12-31 21:11   ` [PATCH 22/32] xfs: record health problems with the metadata directory Darrick J. Wong
2023-12-31 21:12   ` [PATCH 23/32] xfs: do not count metadata directory files when doing online quotacheck Darrick J. Wong
2023-12-31 21:12   ` [PATCH 24/32] xfs: scrub shouldn't tag metadata files with attr forks if metadir and parent pointers are on Darrick J. Wong
2023-12-31 21:12   ` [PATCH 25/32] xfs: scrub metadata directories Darrick J. Wong
2023-12-31 21:13   ` [PATCH 26/32] xfs: teach nlink scrubber to deal with metadata directory roots Darrick J. Wong
2023-12-31 21:13   ` [PATCH 27/32] xfs: don't check secondary super inode pointers when metadir enabled Darrick J. Wong
2023-12-31 21:13   ` [PATCH 28/32] xfs: move repair temporary files to the metadata directory tree Darrick J. Wong
2023-12-31 21:13   ` [PATCH 29/32] xfs: check metadata directory file path connectivity Darrick J. Wong
2023-12-31 21:14   ` [PATCH 30/32] xfs: repair " Darrick J. Wong
2023-12-31 21:14   ` [PATCH 31/32] xfs: fix up repair functions for metadata directory roots Darrick J. Wong
2023-12-31 21:14   ` [PATCH 32/32] xfs: enable metadata directory feature Darrick J. Wong
2023-12-31 19:35 ` [PATCHSET v2.0 03/15] xfs: refactor realtime meta inode locking Darrick J. Wong
2023-12-31 21:14   ` [PATCH 1/4] xfs: refactor realtime scrubbing context management Darrick J. Wong
2023-12-31 21:15   ` [PATCH 2/4] xfs: use separate lock classes for realtime metadata inode ILOCKs Darrick J. Wong
2023-12-31 21:15   ` [PATCH 3/4] xfs: refactor realtime inode locking Darrick J. Wong
2023-12-31 21:15   ` [PATCH 4/4] xfs: remove XFS_ILOCK_RT* Darrick J. Wong
2023-12-31 19:35 ` [PATCHSET v2.0 04/15] xfsprogs: shard the realtime section Darrick J. Wong
2023-12-31 21:15   ` [PATCH 01/24] xfs: create incore realtime group structures Darrick J. Wong
2023-12-31 21:16   ` [PATCH 02/24] xfs: define the format of rt groups Darrick J. Wong
2023-12-31 21:16   ` [PATCH 03/24] xfs: reduce rt summary file levels for rtgroups filesystems Darrick J. Wong
2023-12-31 21:16   ` [PATCH 04/24] xfs: check the realtime superblock at mount time Darrick J. Wong
2023-12-31 21:16   ` [PATCH 05/24] xfs: update primary realtime super every time we update the primary fs super Darrick J. Wong
2023-12-31 21:17   ` [PATCH 06/24] xfs: write secondary realtime superblocks to disk Darrick J. Wong
2023-12-31 21:17   ` [PATCH 07/24] xfs: grow the realtime section when realtime groups are enabled Darrick J. Wong
2023-12-31 21:17   ` [PATCH 08/24] xfs: always update secondary rt supers when we update secondary fs supers Darrick J. Wong
2023-12-31 21:17   ` [PATCH 09/24] xfs: export realtime group geometry via XFS_FSOP_GEOM Darrick J. Wong
2023-12-31 21:18   ` [PATCH 10/24] xfs: check that rtblock extents do not overlap with the rt group metadata Darrick J. Wong
2023-12-31 21:18   ` [PATCH 11/24] xfs: add frextents to the lazysbcounters when rtgroups enabled Darrick J. Wong
2023-12-31 21:18   ` [PATCH 12/24] xfs: record rt group superblock errors in the health system Darrick J. Wong
2023-12-31 21:19   ` [PATCH 13/24] xfs: define locking primitives for realtime groups Darrick J. Wong
2023-12-31 21:19   ` [PATCH 14/24] xfs: export the geometry of realtime groups to userspace Darrick J. Wong
2023-12-31 21:19   ` [PATCH 15/24] xfs: add block headers to realtime bitmap blocks Darrick J. Wong
2023-12-31 21:19   ` [PATCH 16/24] xfs: encode the rtbitmap in little endian format Darrick J. Wong
2023-12-31 21:20   ` [PATCH 17/24] xfs: add block headers to realtime summary blocks Darrick J. Wong
2023-12-31 21:20   ` [PATCH 18/24] xfs: encode the rtsummary in big endian format Darrick J. Wong
2023-12-31 21:20   ` [PATCH 19/24] xfs: store rtgroup information with a bmap intent Darrick J. Wong
2023-12-31 21:20   ` [PATCH 20/24] xfs: use an incore rtgroup rotor for rtpick Darrick J. Wong
2023-12-31 21:21   ` [PATCH 21/24] xfs: scrub the realtime group superblock Darrick J. Wong
2023-12-31 21:21   ` [PATCH 22/24] xfs: repair secondary realtime group superblocks Darrick J. Wong
2023-12-31 21:21   ` [PATCH 23/24] xfs: scrub each rtgroup's portion of the rtbitmap separately Darrick J. Wong
2023-12-31 21:21   ` [PATCH 24/24] xfs: enable realtime group feature Darrick J. Wong
2023-12-31 19:35 ` [PATCHSET v2.0 05/15] xfs: enable FITRIM for the realtime section Darrick J. Wong
2023-12-31 21:22   ` [PATCH 1/1] xfs: enable FITRIM on the realtime device Darrick J. Wong
2024-06-20 19:59     ` [PATCH v2.1 " Darrick J. Wong
2023-12-31 19:36 ` [PATCHSET v2.0 06/15] xfs: refactor btrees to support records in inode root Darrick J. Wong
2023-12-31 21:22   ` [PATCH 01/14] xfs: replace shouty XFS_BM{BT,DR} macros Darrick J. Wong
2023-12-31 21:22   ` [PATCH 02/14] xfs: refactor the allocation and freeing of incore inode fork btree roots Darrick J. Wong
2023-12-31 21:22   ` [PATCH 03/14] xfs: refactor creation of bmap " Darrick J. Wong
2023-12-31 21:23   ` [PATCH 04/14] xfs: fix a sloppy memory handling bug in xfs_iroot_realloc Darrick J. Wong
2023-12-31 21:23   ` [PATCH 05/14] xfs: hoist the code that moves the incore inode fork broot memory Darrick J. Wong
2023-12-31 21:23   ` [PATCH 06/14] xfs: move the zero records logic into xfs_bmap_broot_space_calc Darrick J. Wong
2023-12-31 21:23   ` [PATCH 07/14] xfs: rearrange xfs_iroot_realloc a bit Darrick J. Wong
2023-12-31 21:24   ` [PATCH 08/14] xfs: standardize the btree maxrecs function parameters Darrick J. Wong
2023-12-31 21:24   ` [PATCH 09/14] xfs: generalize the btree root reallocation function Darrick J. Wong
2023-12-31 21:24   ` [PATCH 10/14] xfs: support leaves in the incore btree root block in xfs_iroot_realloc Darrick J. Wong
2023-12-31 21:24   ` [PATCH 11/14] xfs: hoist the node iroot update code out of xfs_btree_new_iroot Darrick J. Wong
2023-12-31 21:25   ` [PATCH 12/14] xfs: hoist the node iroot update code out of xfs_btree_kill_iroot Darrick J. Wong
2023-12-31 21:25   ` [PATCH 13/14] xfs: support storing records in the inode core root Darrick J. Wong
2023-12-31 21:25   ` [PATCH 14/14] xfs: update btree keys correctly when _insrec splits an inode root block Darrick J. Wong
2023-12-31 19:36 ` [PATCHSET v2.0 07/15] xfs: enable in-core block reservation for rt metadata Darrick J. Wong
2023-12-31 21:26   ` [PATCH 1/2] xfs: simplify xfs_ag_resv_free signature Darrick J. Wong
2023-12-31 21:26   ` [PATCH 2/2] xfs: allow inode-based btrees to reserve space in the data device Darrick J. Wong
2023-12-31 19:36 ` [PATCHSET v2.0 08/15] xfs: extent free log intent cleanups Darrick J. Wong
2023-12-31 21:26   ` [PATCH 1/9] xfs: clean up extent free log intent item tracepoint callsites Darrick J. Wong
2023-12-31 21:26   ` [PATCH 2/9] xfs: convert "skip_discard" to a proper flags bitset Darrick J. Wong
2023-12-31 21:27   ` [PATCH 3/9] xfs: pass the fsbno to xfs_perag_intent_get Darrick J. Wong
2023-12-31 21:27   ` [PATCH 4/9] xfs: add a xefi_entry helper Darrick J. Wong
2023-12-31 21:27   ` [PATCH 5/9] xfs: reuse xfs_extent_free_cancel_item Darrick J. Wong
2023-12-31 21:27   ` [PATCH 6/9] xfs: factor out a xfs_efd_add_extent helper Darrick J. Wong
2023-12-31 21:28   ` [PATCH 7/9] xfs: remove duplicate asserts in xfs_defer_extent_free Darrick J. Wong
2023-12-31 21:28   ` [PATCH 8/9] xfs: remove xfs_defer_agfl_block Darrick J. Wong
2023-12-31 21:28   ` [PATCH 9/9] xfs: move xfs_extent_free_defer_add to xfs_extfree_item.c Darrick J. Wong
2023-12-31 19:36 ` [PATCHSET v2.0 09/15] xfs: widen EFI format to support rt Darrick J. Wong
2023-12-31 21:28   ` [PATCH 1/2] xfs: support logging EFIs for realtime extents Darrick J. Wong
2023-12-31 21:29   ` [PATCH 2/2] xfs: support error injection when freeing rt extents Darrick J. Wong
2023-12-31 19:37 ` [PATCHSET v2.0 10/15] xfs: rmap log intent cleanups Darrick J. Wong
2023-12-31 21:29   ` [PATCH 01/10] xfs: attach rtgroup objects to btree cursors Darrick J. Wong
2023-12-31 21:29   ` [PATCH 02/10] xfs: give rmap btree cursor error tracepoints their own class Darrick J. Wong
2023-12-31 21:29   ` [PATCH 03/10] xfs: prepare rmap btree tracepoints for widening Darrick J. Wong
2023-12-31 21:30   ` [PATCH 04/10] xfs: clean up rmap log intent item tracepoint callsites Darrick J. Wong
2023-12-31 21:30   ` [PATCH 05/10] xfs: remove xfs_trans_set_rmap_flags Darrick J. Wong
2023-12-31 21:30   ` [PATCH 06/10] xfs: add a ri_entry helper Darrick J. Wong
2023-12-31 21:31   ` [PATCH 07/10] xfs: reuse xfs_rmap_update_cancel_item Darrick J. Wong
2023-12-31 21:31   ` [PATCH 08/10] xfs: don't bother calling xfs_rmap_finish_one_cleanup in xfs_rmap_finish_one Darrick J. Wong
2023-12-31 21:31   ` [PATCH 09/10] xfs: simplify usage of the rcur local variable " Darrick J. Wong
2023-12-31 21:31   ` [PATCH 10/10] xfs: move xfs_rmap_update_defer_add to xfs_rmap_item.c Darrick J. Wong
2023-12-31 19:37 ` [PATCHSET v2.0 11/15] xfs: realtime reverse-mapping support Darrick J. Wong
2023-12-31 21:32   ` [PATCH 01/39] xfs: prepare rmap btree cursor tracepoints for realtime Darrick J. Wong
2023-12-31 21:32   ` [PATCH 02/39] xfs: simplify the xfs_rmap_{alloc,free}_extent calling conventions Darrick J. Wong
2023-12-31 21:32   ` [PATCH 03/39] xfs: introduce realtime rmap btree definitions Darrick J. Wong
2023-12-31 21:32   ` [PATCH 04/39] xfs: define the on-disk realtime rmap btree format Darrick J. Wong
2023-12-31 21:33   ` [PATCH 05/39] xfs: realtime rmap btree transaction reservations Darrick J. Wong
2023-12-31 21:33   ` [PATCH 06/39] xfs: add realtime rmap btree operations Darrick J. Wong
2023-12-31 21:33   ` [PATCH 07/39] xfs: prepare rmap functions to deal with rtrmapbt Darrick J. Wong
2023-12-31 21:33   ` [PATCH 08/39] xfs: add a realtime flag to the rmap update log redo items Darrick J. Wong
2023-12-31 21:34   ` [PATCH 09/39] xfs: support recovering rmap intent items targetting realtime extents Darrick J. Wong
2023-12-31 21:34   ` [PATCH 10/39] xfs: add realtime rmap btree block detection to log recovery Darrick J. Wong
2023-12-31 21:34   ` [PATCH 11/39] xfs: add realtime reverse map inode to metadata directory Darrick J. Wong
2023-12-31 21:34   ` [PATCH 12/39] xfs: add metadata reservations for realtime rmap btrees Darrick J. Wong
2023-12-31 21:35   ` [PATCH 13/39] xfs: wire up a new inode fork type for the realtime rmap Darrick J. Wong
2023-12-31 21:35   ` [PATCH 14/39] xfs: allow inodes with zero extents but nonzero nblocks Darrick J. Wong
2023-12-31 21:35   ` [PATCH 15/39] xfs: use realtime EFI to free extents when realtime rmap is enabled Darrick J. Wong
2023-12-31 21:35   ` [PATCH 16/39] xfs: wire up rmap map and unmap to the realtime rmapbt Darrick J. Wong
2023-12-31 21:36   ` [PATCH 17/39] xfs: create routine to allocate and initialize a realtime rmap btree inode Darrick J. Wong
2023-12-31 21:36   ` [PATCH 18/39] xfs: rearrange xfs_fsmap.c a little bit Darrick J. Wong
2023-12-31 21:36   ` [PATCH 19/39] xfs: wire up getfsmap to the realtime reverse mapping btree Darrick J. Wong
2023-12-31 21:37   ` [PATCH 20/39] xfs: check that the rtrmapbt maxlevels doesn't increase when growing fs Darrick J. Wong
2023-12-31 21:37   ` [PATCH 21/39] xfs: add realtime rmap btree when adding rt volume Darrick J. Wong
2023-12-31 21:37   ` [PATCH 22/39] xfs: report realtime rmap btree corruption errors to the health system Darrick J. Wong
2023-12-31 21:37   ` [PATCH 23/39] xfs: fix scrub tracepoints when inode-rooted btrees are involved Darrick J. Wong
2023-12-31 21:38   ` [PATCH 24/39] xfs: allow queued realtime intents to drain before scrubbing Darrick J. Wong
2023-12-31 21:38   ` [PATCH 25/39] xfs: scrub the realtime rmapbt Darrick J. Wong
2023-12-31 21:38   ` [PATCH 26/39] xfs: cross-reference realtime bitmap to realtime rmapbt scrubber Darrick J. Wong
2023-12-31 21:38   ` [PATCH 27/39] xfs: cross-reference the realtime rmapbt Darrick J. Wong
2023-12-31 21:39   ` [PATCH 28/39] xfs: scan rt rmap when we're doing an intense rmap check of bmbt mappings Darrick J. Wong
2023-12-31 21:39   ` [PATCH 29/39] xfs: scrub the metadir path of rt rmap btree files Darrick J. Wong
2023-12-31 21:39   ` [PATCH 30/39] xfs: walk the rt reverse mapping tree when rebuilding rmap Darrick J. Wong
2023-12-31 21:39   ` [PATCH 31/39] xfs: online repair of realtime file bmaps Darrick J. Wong
2023-12-31 21:40   ` [PATCH 32/39] xfs: repair inodes that have realtime extents Darrick J. Wong
2023-12-31 21:40   ` [PATCH 33/39] xfs: repair rmap btree inodes Darrick J. Wong
2023-12-31 21:40   ` [PATCH 34/39] xfs: online repair of realtime bitmaps for a realtime group Darrick J. Wong
2023-12-31 21:40   ` [PATCH 35/39] xfs: support repairing metadata btrees rooted in metadir inodes Darrick J. Wong
2023-12-31 21:41   ` [PATCH 36/39] xfs: online repair of the realtime rmap btree Darrick J. Wong
2023-12-31 21:41   ` [PATCH 37/39] xfs: create a shadow rmap btree during realtime rmap repair Darrick J. Wong
2023-12-31 21:41   ` [PATCH 38/39] xfs: hook live realtime rmap operations during a repair operation Darrick J. Wong
2023-12-31 21:41   ` [PATCH 39/39] xfs: enable realtime rmap btree Darrick J. Wong
2023-12-31 19:37 ` [PATCHSET v2.0 12/15] xfs: refcount log intent cleanups Darrick J. Wong
2023-12-31 21:42   ` [PATCH 01/10] xfs: give refcount btree cursor error tracepoints their own class Darrick J. Wong
2023-12-31 21:42   ` [PATCH 02/10] xfs: create specialized classes for refcount tracepoints Darrick J. Wong
2023-12-31 21:42   ` [PATCH 03/10] xfs: prepare refcount btree tracepoints for widening Darrick J. Wong
2023-12-31 21:43   ` [PATCH 04/10] xfs: clean up refcount log intent item tracepoint callsites Darrick J. Wong
2023-12-31 21:43   ` [PATCH 05/10] xfs: remove xfs_trans_set_refcount_flags Darrick J. Wong
2023-12-31 21:43   ` [PATCH 06/10] xfs: add a ci_entry helper Darrick J. Wong
2023-12-31 21:43   ` [PATCH 07/10] xfs: reuse xfs_refcount_update_cancel_item Darrick J. Wong
2023-12-31 21:44   ` [PATCH 08/10] xfs: don't bother calling xfs_refcount_finish_one_cleanup in xfs_refcount_finish_one Darrick J. Wong
2023-12-31 21:44   ` [PATCH 09/10] xfs: simplify usage of the rcur local variable " Darrick J. Wong
2023-12-31 21:44   ` [PATCH 10/10] xfs: move xfs_refcount_update_defer_add to xfs_refcount_item.c Darrick J. Wong
2023-12-31 19:37 ` [PATCHSET v2.0 13/15] xfs: reflink on the realtime device Darrick J. Wong
2023-12-31 21:44   ` [PATCH 01/44] xfs: prepare refcount btree cursor tracepoints for realtime Darrick J. Wong
2023-12-31 21:45   ` [PATCH 02/44] xfs: introduce realtime refcount btree definitions Darrick J. Wong
2023-12-31 21:45   ` [PATCH 03/44] xfs: namespace the maximum length/refcount symbols Darrick J. Wong
2023-12-31 21:45   ` [PATCH 04/44] xfs: define the on-disk realtime refcount btree format Darrick J. Wong
2023-12-31 21:45   ` [PATCH 05/44] xfs: realtime refcount btree transaction reservations Darrick J. Wong
2023-12-31 21:46   ` [PATCH 06/44] xfs: add realtime refcount btree operations Darrick J. Wong
2023-12-31 21:46   ` [PATCH 07/44] xfs: prepare refcount functions to deal with rtrefcountbt Darrick J. Wong
2023-12-31 21:46   ` [PATCH 08/44] xfs: add a realtime flag to the refcount update log redo items Darrick J. Wong
2023-12-31 21:46   ` [PATCH 09/44] xfs: support recovering refcount intent items targetting realtime extents Darrick J. Wong
2023-12-31 21:47   ` [PATCH 10/44] xfs: add realtime refcount btree block detection to log recovery Darrick J. Wong
2023-12-31 21:47   ` [PATCH 11/44] xfs: add realtime refcount btree inode to metadata directory Darrick J. Wong
2023-12-31 21:47   ` [PATCH 12/44] xfs: add metadata reservations for realtime refcount btree Darrick J. Wong
2023-12-31 21:47   ` [PATCH 13/44] xfs: wire up a new inode fork type for the realtime refcount Darrick J. Wong
2023-12-31 21:48   ` [PATCH 14/44] xfs: wire up realtime refcount btree cursors Darrick J. Wong
2023-12-31 21:48   ` [PATCH 15/44] xfs: create routine to allocate and initialize a realtime refcount btree inode Darrick J. Wong
2023-12-31 21:48   ` [PATCH 16/44] xfs: update rmap to allow cow staging extents in the rt rmap Darrick J. Wong
2023-12-31 21:49   ` [PATCH 17/44] xfs: compute rtrmap btree max levels when reflink enabled Darrick J. Wong
2023-12-31 21:49   ` [PATCH 18/44] xfs: refactor reflink quota updates Darrick J. Wong
2023-12-31 21:49   ` [PATCH 19/44] xfs: enable CoW for realtime data Darrick J. Wong
2023-12-31 21:49   ` [PATCH 20/44] xfs: enable sharing of realtime file blocks Darrick J. Wong
2023-12-31 21:50   ` [PATCH 21/44] xfs: allow inodes to have the realtime and reflink flags Darrick J. Wong
2023-12-31 21:50   ` [PATCH 22/44] xfs: refcover CoW leftovers in the realtime volume Darrick J. Wong
2023-12-31 21:50   ` [PATCH 23/44] xfs: fix xfs_get_extsz_hint behavior with realtime alwayscow files Darrick J. Wong
2023-12-31 21:50   ` [PATCH 24/44] xfs: apply rt extent alignment constraints to CoW extsize hint Darrick J. Wong
2023-12-31 21:51   ` [PATCH 25/44] xfs: enable extent size hints for CoW operations Darrick J. Wong
2023-12-31 21:51   ` [PATCH 26/44] xfs: check that the rtrefcount maxlevels doesn't increase when growing fs Darrick J. Wong
2023-12-31 21:51   ` [PATCH 27/44] xfs: add realtime refcount btree when adding rt volume Darrick J. Wong
2023-12-31 21:51   ` [PATCH 28/44] xfs: report realtime refcount btree corruption errors to the health system Darrick J. Wong
2023-12-31 21:52   ` [PATCH 29/44] xfs: scrub the realtime refcount btree Darrick J. Wong
2023-12-31 21:52   ` [PATCH 30/44] xfs: cross-reference checks with the rt " Darrick J. Wong
2023-12-31 21:52   ` [PATCH 31/44] xfs: allow overlapping rtrmapbt records for shared data extents Darrick J. Wong
2023-12-31 21:52   ` [PATCH 32/44] xfs: check reference counts of gaps between rt refcount records Darrick J. Wong
2023-12-31 21:53   ` [PATCH 33/44] xfs: allow dquot rt block count to exceed rt blocks on reflink fs Darrick J. Wong
2023-12-31 21:53   ` [PATCH 34/44] xfs: detect and repair misaligned rtinherit directory cowextsize hints Darrick J. Wong
2023-12-31 21:53   ` [PATCH 35/44] xfs: scrub the metadir path of rt refcount btree files Darrick J. Wong
2023-12-31 21:53   ` [PATCH 36/44] xfs: don't flag quota rt block usage on rtreflink filesystems Darrick J. Wong
2023-12-31 21:54   ` [PATCH 37/44] xfs: check new rtbitmap records against rt refcount btree Darrick J. Wong
2023-12-31 21:54   ` [PATCH 38/44] xfs: walk the rt reference count tree when rebuilding rmap Darrick J. Wong
2023-12-31 21:54   ` [PATCH 39/44] xfs: capture realtime CoW staging extents when rebuilding rt rmapbt Darrick J. Wong
2023-12-31 21:54   ` [PATCH 40/44] xfs: online repair of the realtime refcount btree Darrick J. Wong
2023-12-31 21:55   ` [PATCH 41/44] xfs: repair inodes that have a refcount btree in the data fork Darrick J. Wong
2023-12-31 21:55   ` [PATCH 42/44] xfs: check for shared rt extents when rebuilding rt file's " Darrick J. Wong
2023-12-31 21:55   ` [PATCH 43/44] xfs: fix CoW forks for realtime files Darrick J. Wong
2023-12-31 21:56   ` [PATCH 44/44] xfs: enable realtime reflink Darrick J. Wong
2023-12-31 19:38 ` [PATCHSET v2.0 14/15] xfs: reflink with large realtime extents Darrick J. Wong
2023-12-31 21:56   ` [PATCH 1/9] vfs: explicitly pass the block size to the remap prep function Darrick J. Wong
2023-12-31 21:56   ` [PATCH 2/9] xfs: enable CoW when rt extent size is larger than 1 block Darrick J. Wong
2023-12-31 21:56   ` [PATCH 3/9] xfs: forcibly convert unwritten blocks within an rt extent before sharing Darrick J. Wong
2023-12-31 21:57   ` [PATCH 4/9] xfs: add some tracepoints for writeback Darrick J. Wong
2023-12-31 21:57   ` [PATCH 5/9] xfs: extend writeback requests to handle rt cow correctly Darrick J. Wong
2023-12-31 21:57   ` [PATCH 6/9] xfs: enable extent size hints for CoW when rtextsize > 1 Darrick J. Wong
2023-12-31 21:57   ` [PATCH 7/9] xfs: allow reflink on the rt volume when extent size is larger than 1 rt block Darrick J. Wong
2023-12-31 21:58   ` [PATCH 8/9] xfs: fix integer overflow when validating extent size hints Darrick J. Wong
2023-12-31 21:58   ` [PATCH 9/9] xfs: support realtime reflink with an extent size that isn't a power of 2 Darrick J. Wong
2023-12-31 19:38 ` [PATCHSET v2.0 15/15] xfs: enable quota for realtime voluems Darrick J. Wong
2023-12-31 21:58   ` [PATCH 1/6] xfs: attach dquots to rt metadata files when starting quota Darrick J. Wong
2023-12-31 21:58   ` [PATCH 2/6] xfs: fix chown with rt quota Darrick J. Wong
2023-12-31 21:59   ` [PATCH 3/6] xfs: fix rt growfs quota accounting Darrick J. Wong
2023-12-31 21:59   ` [PATCH 4/6] xfs: advertise realtime quota support in the xqm stat files Darrick J. Wong
2023-12-31 21:59   ` [PATCH 5/6] xfs: report realtime block quota limits on realtime directories Darrick J. Wong
2023-12-31 21:59   ` [PATCH 6/6] xfs: enable realtime quota again Darrick J. Wong
2023-12-31 19:51 ` [PATCHSET v2.0 01/17] xfsprogs: hoist inode operations to libxfs Darrick J. Wong
2023-12-31 23:22   ` [PATCH 01/28] xfs: hoist extent size helpers " Darrick J. Wong
2023-12-31 23:22   ` [PATCH 02/28] xfs: hoist inode flag conversion functions " Darrick J. Wong
2023-12-31 23:23   ` [PATCH 03/28] xfs: hoist project id get/set " Darrick J. Wong
2023-12-31 23:23   ` [PATCH 04/28] libxfs: put all the inode functions in a single file Darrick J. Wong
2023-12-31 23:23   ` [PATCH 05/28] libxfs: pass IGET flags through to xfs_iread Darrick J. Wong
2023-12-31 23:23   ` [PATCH 06/28] xfs: pack icreate initialization parameters into a separate structure Darrick J. Wong
2023-12-31 23:24   ` [PATCH 07/28] xfs: implement atime updates in xfs_trans_ichgtime Darrick J. Wong
2023-12-31 23:24   ` [PATCH 08/28] libxfs: rearrange libxfs_trans_ichgtime call when creating inodes Darrick J. Wong
2023-12-31 23:24   ` [PATCH 09/28] libxfs: set access time when creating files Darrick J. Wong
2023-12-31 23:24   ` [PATCH 10/28] libxfs: when creating a file in a directory, set the project id based on the parent Darrick J. Wong
2023-12-31 23:25   ` [PATCH 11/28] libxfs: pass flags2 from parent to child when creating files Darrick J. Wong
2023-12-31 23:25   ` [PATCH 12/28] xfs: split new inode creation into two pieces Darrick J. Wong
2023-12-31 23:25   ` [PATCH 13/28] libxfs: backport inode init code from the kernel Darrick J. Wong
2023-12-31 23:25   ` [PATCH 14/28] libxfs: remove libxfs_dir_ialloc Darrick J. Wong
2023-12-31 23:26   ` [PATCH 15/28] libxfs: implement get_random_u32 Darrick J. Wong
2023-12-31 23:26   ` [PATCH 16/28] xfs: hoist new inode initialization functions to libxfs Darrick J. Wong
2023-12-31 23:26   ` [PATCH 17/28] xfs: hoist xfs_iunlink " Darrick J. Wong
2023-12-31 23:26   ` [PATCH 18/28] xfs: hoist xfs_{bump,drop}link " Darrick J. Wong
2023-12-31 23:27   ` [PATCH 19/28] xfs: create libxfs helper to link a new inode into a directory Darrick J. Wong
2023-12-31 23:27   ` [PATCH 20/28] xfs: create libxfs helper to link an existing " Darrick J. Wong
2023-12-31 23:27   ` [PATCH 21/28] xfs: hoist inode free function to libxfs Darrick J. Wong
2023-12-31 23:28   ` [PATCH 22/28] xfs: create libxfs helper to remove an existing inode/name from a directory Darrick J. Wong
2023-12-31 23:28   ` [PATCH 23/28] xfs: create libxfs helper to exchange two directory entries Darrick J. Wong
2023-12-31 23:28   ` [PATCH 24/28] xfs: create libxfs helper to rename " Darrick J. Wong
2023-12-31 23:28   ` [PATCH 25/28] xfs: move dirent update hooks to xfs_dir2.c Darrick J. Wong
2023-12-31 23:29   ` [PATCH 26/28] xfs_db: port the iunlink command to use the libxfs iunlink function Darrick J. Wong
2023-12-31 23:29   ` [PATCH 27/28] xfs_repair: use library functions to reset root/rbm/rsum inodes Darrick J. Wong
2023-12-31 23:29   ` [PATCH 28/28] xfs_repair: use library functions for orphanage creation Darrick J. Wong
2023-12-31 19:52 ` [PATCHSET v2.0 02/17] xfsprogs: metadata inode directories Darrick J. Wong
2023-12-31 23:29   ` [PATCH 01/58] xfs: don't use the incore struct xfs_sb for offsets into struct xfs_dsb Darrick J. Wong
2023-12-31 23:30   ` [PATCH 02/58] xfs: create imeta abstractions to get and set metadata inodes Darrick J. Wong
2023-12-31 23:30   ` [PATCH 03/58] xfs: create transaction reservations for metadata inode operations Darrick J. Wong
2023-12-31 23:30   ` [PATCH 04/58] mkfs: clean up the rtinit() function Darrick J. Wong
2023-12-31 23:30   ` [PATCH 05/58] libxfs: convert all users to libxfs_imeta_create Darrick J. Wong
2023-12-31 23:31   ` [PATCH 06/58] mkfs: break up the rest of the rtinit() function Darrick J. Wong
2023-12-31 23:31   ` [PATCH 07/58] xfs: iget for metadata inodes Darrick J. Wong
2023-12-31 23:31   ` [PATCH 08/58] xfs: define the on-disk format for the metadir feature Darrick J. Wong
2023-12-31 23:31   ` [PATCH 09/58] xfs: update imeta transaction reservations for metadir Darrick J. Wong
2023-12-31 23:32   ` [PATCH 10/58] xfs: load metadata directory root at mount time Darrick J. Wong
2023-12-31 23:32   ` [PATCH 11/58] xfs: convert metadata inode lookup keys to use paths Darrick J. Wong
2023-12-31 23:32   ` [PATCH 12/58] xfs: enforce metadata inode flag Darrick J. Wong
2023-12-31 23:32   ` [PATCH 13/58] xfs: allow deletion of metadata directory files Darrick J. Wong
2023-12-31 23:33   ` [PATCH 14/58] xfs: read and write metadata inode directory Darrick J. Wong
2023-12-31 23:33   ` [PATCH 15/58] xfs: ensure metadata directory paths exist before creating files Darrick J. Wong
2023-12-31 23:33   ` [PATCH 16/58] xfs: disable the agi rotor for metadata inodes Darrick J. Wong
2023-12-31 23:34   ` [PATCH 17/58] xfs: advertise metadata directory feature Darrick J. Wong
2023-12-31 23:34   ` [PATCH 18/58] xfs: allow bulkstat to return metadata directories Darrick J. Wong
2023-12-31 23:34   ` [PATCH 19/58] xfs: enable creation of dynamically allocated metadir path structures Darrick J. Wong
2023-12-31 23:34   ` [PATCH 20/58] xfs: adjust xfs_bmap_add_attrfork for metadir Darrick J. Wong
2023-12-31 23:35   ` [PATCH 21/58] xfs: record health problems with the metadata directory Darrick J. Wong
2023-12-31 23:35   ` [PATCH 22/58] xfs: check metadata directory file path connectivity Darrick J. Wong
2023-12-31 23:35   ` [PATCH 23/58] libfrog: report metadata directories in the geometry report Darrick J. Wong
2023-12-31 23:35   ` [PATCH 24/58] libfrog: allow METADIR in xfrog_bulkstat_single5 Darrick J. Wong
2023-12-31 23:36   ` [PATCH 25/58] xfs_io: support scrubbing metadata directory paths Darrick J. Wong
2023-12-31 23:36   ` [PATCH 26/58] xfs_db: basic xfs_check support for metadir Darrick J. Wong
2023-12-31 23:36   ` [PATCH 27/58] xfs_db: report metadir support for version command Darrick J. Wong
2023-12-31 23:36   ` [PATCH 28/58] xfs_db: don't obfuscate metadata directories and attributes Darrick J. Wong
2023-12-31 23:37   ` [PATCH 29/58] xfs_db: support metadata directories in the path command Darrick J. Wong
2023-12-31 23:37   ` [PATCH 30/58] xfs_db: mask superblock fields when metadir feature is enabled Darrick J. Wong
2023-12-31 23:37   ` [PATCH 31/58] xfs_io: support the bulkstat metadata directory flag Darrick J. Wong
2023-12-31 23:37   ` [PATCH 32/58] xfs_io: support scrubbing metadata directory paths Darrick J. Wong
2023-12-31 23:38   ` [PATCH 33/58] xfs_spaceman: report health of metadir inodes too Darrick J. Wong
2023-12-31 23:38   ` [PATCH 34/58] xfs_scrub: scan metadata directories during phase 3 Darrick J. Wong
2023-12-31 23:38   ` [PATCH 35/58] xfs_scrub: re-run metafile scrubbers during phase 5 Darrick J. Wong
2023-12-31 23:38   ` [PATCH 36/58] xfs_repair: don't zero the incore secondary super when zeroing Darrick J. Wong
2023-12-31 23:39   ` [PATCH 37/58] xfs_repair: refactor metadata inode tagging Darrick J. Wong
2023-12-31 23:39   ` [PATCH 38/58] xfs_repair: reject regular directory dirents that point to metadata fieles Darrick J. Wong
2023-12-31 23:39   ` [PATCH 39/58] xfs_repair: dont check metadata directory dirent inumbers Darrick J. Wong
2023-12-31 23:40   ` [PATCH 40/58] xfs_repair: refactor fixing dotdot Darrick J. Wong
2023-12-31 23:40   ` [PATCH 41/58] xfs_repair: refactor marking of metadata inodes Darrick J. Wong
2023-12-31 23:40   ` [PATCH 42/58] xfs_repair: refactor root directory initialization Darrick J. Wong
2023-12-31 23:40   ` [PATCH 43/58] xfs_repair: refactor grabbing realtime metadata inodes Darrick J. Wong
2023-12-31 23:41   ` [PATCH 44/58] xfs_repair: check metadata inode flag Darrick J. Wong
2023-12-31 23:41   ` [PATCH 45/58] xfs_repair: rebuild the metadata directory Darrick J. Wong
2023-12-31 23:41   ` [PATCH 46/58] xfs_repair: don't let metadata and regular files mix Darrick J. Wong
2023-12-31 23:41   ` [PATCH 47/58] xfs_repair: update incore metadata state whenever we create new files Darrick J. Wong
2023-12-31 23:42   ` [PATCH 48/58] xfs_repair: pass private data pointer to scan_lbtree Darrick J. Wong
2023-12-31 23:42   ` [PATCH 49/58] xfs_repair: mark space used by metadata files Darrick J. Wong
2023-12-31 23:42   ` [PATCH 50/58] xfs_repair: adjust keep_fsinos to handle metadata directories Darrick J. Wong
2023-12-31 23:42   ` [PATCH 51/58] xfs_repair: metadata dirs are never plausible root dirs Darrick J. Wong
2023-12-31 23:43   ` [PATCH 52/58] xfs_repair: reattach quota inodes to metadata directory Darrick J. Wong
2023-12-31 23:43   ` [PATCH 53/58] xfs_repair: drop all the metadata directory files during pass 4 Darrick J. Wong
2023-12-31 23:43   ` [PATCH 54/58] xfs_repair: truncate and unmark orphaned metadata inodes Darrick J. Wong
2023-12-31 23:43   ` [PATCH 55/58] xfs_repair: do not count metadata directory files when doing quotacheck Darrick J. Wong
2023-12-31 23:44   ` [PATCH 56/58] xfs_repair: allow sysadmins to add metadata directories Darrick J. Wong
2023-12-31 23:44   ` [PATCH 57/58] mkfs.xfs: enable " Darrick J. Wong
2023-12-31 23:44   ` [PATCH 58/58] mkfs: add a utility to generate protofiles Darrick J. Wong
2023-12-31 19:52 ` [PATCHSET v2.0 03/17] xfs_db: debug realtime geometry Darrick J. Wong
2023-12-31 23:44   ` [PATCH 1/8] xfs_db: support passing the realtime device to the debugger Darrick J. Wong
2023-12-31 23:45   ` [PATCH 2/8] xfs_db: report the realtime device when associated with each io cursor Darrick J. Wong
2023-12-31 23:45   ` [PATCH 3/8] xfs_db: make the daddr command target the realtime device Darrick J. Wong
2023-12-31 23:45   ` [PATCH 4/8] xfs_db: access realtime file blocks Darrick J. Wong
2023-12-31 23:46   ` [PATCH 5/8] xfs_db: access arbitrary realtime blocks and extents Darrick J. Wong
2023-12-31 23:46   ` [PATCH 6/8] xfs_db: enable conversion of rt space units Darrick J. Wong
2023-12-31 23:46   ` [PATCH 7/8] xfs_db: convert rtbitmap geometry Darrick J. Wong
2023-12-31 23:46   ` [PATCH 8/8] xfs_db: convert rtsummary geometry Darrick J. Wong
2023-12-31 19:52 ` [PATCHSET v2.0 04/17] xfs_metadump: support external devices Darrick J. Wong
2023-12-31 23:47   ` [PATCH 1/1] xfs_db: allow setting current address to log blocks Darrick J. Wong
2023-12-31 19:52 ` [PATCHSET v2.0 05/17] xfsprogs: refactor realtime meta inode locking Darrick J. Wong
2023-12-31 23:47   ` [PATCH 1/2] xfs: refactor realtime " Darrick J. Wong
2023-12-31 23:47   ` [PATCH 2/2] xfs: remove XFS_ILOCK_RT* Darrick J. Wong
2023-12-31 19:53 ` [PATCHSET v2.0 06/17] xfsprogs: shard the realtime section Darrick J. Wong
2023-12-27 13:00   ` [PATCH 48/52] xfs_scrub: trim realtime volumes too Darrick J. Wong
2023-12-27 13:00   ` [PATCH 49/52] xfs_scrub: use histograms to speed up phase 8 on the realtime volume Darrick J. Wong
2023-12-27 13:00   ` [PATCH 50/52] mkfs: add headers to realtime bitmap blocks Darrick J. Wong
2023-12-27 13:00   ` [PATCH 51/52] mkfs: add headers to realtime summary blocks Darrick J. Wong
2023-12-27 13:01   ` [PATCH 52/52] mkfs: format realtime groups Darrick J. Wong
2023-12-31 23:47   ` [PATCH 01/52] xfs: create incore realtime group structures Darrick J. Wong
2023-12-31 23:48   ` [PATCH 02/52] xfs: define the format of rt groups Darrick J. Wong
2023-12-31 23:48   ` [PATCH 03/52] xfs: reduce rt summary file levels for rtgroups filesystems Darrick J. Wong
2023-12-31 23:48   ` [PATCH 04/52] xfs: update primary realtime super every time we update the primary fs super Darrick J. Wong
2023-12-31 23:48   ` [PATCH 05/52] xfs: write secondary realtime superblocks to disk Darrick J. Wong
2023-12-31 23:49   ` [PATCH 06/52] xfs: grow the realtime section when realtime groups are enabled Darrick J. Wong
2023-12-31 23:49   ` [PATCH 07/52] xfs: export realtime group geometry via XFS_FSOP_GEOM Darrick J. Wong
2023-12-31 23:49   ` [PATCH 08/52] xfs: check that rtblock extents do not overlap with the rt group metadata Darrick J. Wong
2023-12-31 23:49   ` [PATCH 09/52] xfs: add frextents to the lazysbcounters when rtgroups enabled Darrick J. Wong
2023-12-31 23:50   ` [PATCH 10/52] xfs: record rt group superblock errors in the health system Darrick J. Wong
2023-12-31 23:50   ` [PATCH 11/52] xfs: define locking primitives for realtime groups Darrick J. Wong
2023-12-31 23:50   ` [PATCH 12/52] xfs: export the geometry of realtime groups to userspace Darrick J. Wong
2023-12-31 23:50   ` [PATCH 13/52] xfs: add block headers to realtime bitmap blocks Darrick J. Wong
2023-12-31 23:51   ` [PATCH 14/52] xfs: encode the rtbitmap in little endian format Darrick J. Wong
2023-12-31 23:51   ` [PATCH 15/52] xfs: add block headers to realtime summary blocks Darrick J. Wong
2023-12-31 23:51   ` [PATCH 16/52] xfs: encode the rtsummary in big endian format Darrick J. Wong
2023-12-31 23:51   ` [PATCH 17/52] xfs: store rtgroup information with a bmap intent Darrick J. Wong
2023-12-31 23:52   ` [PATCH 18/52] xfs: use an incore rtgroup rotor for rtpick Darrick J. Wong
2023-12-31 23:52   ` [PATCH 19/52] xfs: scrub the realtime group superblock Darrick J. Wong
2023-12-31 23:52   ` [PATCH 20/52] xfs: repair secondary realtime group superblocks Darrick J. Wong
2023-12-31 23:53   ` [PATCH 21/52] xfs: scrub each rtgroup's portion of the rtbitmap separately Darrick J. Wong
2023-12-31 23:53   ` [PATCH 22/52] libfrog: report rt groups in output Darrick J. Wong
2023-12-31 23:53   ` [PATCH 23/52] libxfs: implement some sanity checking for enormous rgcount Darrick J. Wong
2023-12-31 23:53   ` [PATCH 24/52] xfs_repair: support realtime groups Darrick J. Wong
2023-12-31 23:54   ` [PATCH 25/52] xfs_repair: improve rtbitmap discrepancy reporting Darrick J. Wong
2023-12-31 23:54   ` [PATCH 26/52] xfs_repair: repair rtbitmap block headers Darrick J. Wong
2023-12-31 23:54   ` [PATCH 27/52] xfs_repair: repair rtsummary " Darrick J. Wong
2023-12-31 23:54   ` [PATCH 28/52] xfs_repair: support adding rtgroups to a filesystem Darrick J. Wong
2023-12-31 23:55   ` [PATCH 29/52] xfs_db: listify the definition of enum typnm Darrick J. Wong
2023-12-31 23:55   ` [PATCH 30/52] xfs_db: support dumping realtime superblocks Darrick J. Wong
2023-12-31 23:55   ` [PATCH 31/52] xfs_db: support changing the label and uuid of rt superblocks Darrick J. Wong
2023-12-31 23:55   ` [PATCH 32/52] xfs_db: listify the definition of dbm_t Darrick J. Wong
2023-12-31 23:56   ` [PATCH 33/52] xfs_db: implement check for rt superblocks Darrick J. Wong
2023-12-31 23:56   ` [PATCH 34/52] xfs_db: enable conversion of rt space units Darrick J. Wong
2023-12-31 23:56   ` [PATCH 35/52] xfs_db: report rtgroups via version command Darrick J. Wong
2023-12-31 23:56   ` [PATCH 36/52] xfs_db: metadump realtime devices Darrick J. Wong
2023-12-31 23:57   ` [PATCH 37/52] xfs_db: dump rt bitmap blocks Darrick J. Wong
2023-12-31 23:57   ` [PATCH 38/52] xfs_db: dump rt summary blocks Darrick J. Wong
2023-12-31 23:57   ` [PATCH 39/52] xfs_mdrestore: restore rt group superblocks to realtime device Darrick J. Wong
2023-12-31 23:57   ` [PATCH 40/52] xfs_io: support scrubbing rtgroup metadata Darrick J. Wong
2023-12-31 23:58   ` [PATCH 41/52] xfs_io: add a command to display allocation group information Darrick J. Wong
2023-12-31 23:58   ` [PATCH 42/52] xfs_io: add a command to display realtime " Darrick J. Wong
2023-12-31 23:58   ` [PATCH 43/52] xfs_io: display rt group in verbose bmap output Darrick J. Wong
2023-12-31 23:59   ` [PATCH 44/52] xfs_io: display rt group in verbose fsmap output Darrick J. Wong
2023-12-31 23:59   ` [PATCH 45/52] xfs_spaceman: report on realtime group health Darrick J. Wong
2023-12-31 23:59   ` [PATCH 46/52] xfs_scrub: scrub realtime allocation group metadata Darrick J. Wong
2023-12-31 23:59   ` [PATCH 47/52] xfs_scrub: call GETFSMAP for each rt group in parallel Darrick J. Wong
2023-12-31 19:53 ` [PATCHSET v2.0 07/17] xfsprogs: refactor btrees to support records in inode root Darrick J. Wong
2023-12-27 13:01   ` [PATCH 01/14] xfs: replace shouty XFS_BM{BT,DR} macros Darrick J. Wong
2023-12-27 13:01   ` [PATCH 02/14] xfs: refactor the allocation and freeing of incore inode fork btree roots Darrick J. Wong
2023-12-27 13:01   ` [PATCH 03/14] xfs: refactor creation of bmap " Darrick J. Wong
2023-12-27 13:02   ` [PATCH 04/14] xfs: fix a sloppy memory handling bug in xfs_iroot_realloc Darrick J. Wong
2023-12-27 13:02   ` [PATCH 05/14] xfs: hoist the code that moves the incore inode fork broot memory Darrick J. Wong
2023-12-27 13:02   ` [PATCH 06/14] xfs: move the zero records logic into xfs_bmap_broot_space_calc Darrick J. Wong
2023-12-27 13:02   ` [PATCH 07/14] xfs: rearrange xfs_iroot_realloc a bit Darrick J. Wong
2023-12-27 13:03   ` [PATCH 08/14] xfs: standardize the btree maxrecs function parameters Darrick J. Wong
2023-12-27 13:03   ` [PATCH 09/14] xfs: generalize the btree root reallocation function Darrick J. Wong
2023-12-27 13:03   ` [PATCH 10/14] xfs: support leaves in the incore btree root block in xfs_iroot_realloc Darrick J. Wong
2023-12-27 13:03   ` [PATCH 11/14] xfs: hoist the node iroot update code out of xfs_btree_new_iroot Darrick J. Wong
2023-12-27 13:04   ` [PATCH 12/14] xfs: hoist the node iroot update code out of xfs_btree_kill_iroot Darrick J. Wong
2023-12-27 13:04   ` [PATCH 13/14] xfs: support storing records in the inode core root Darrick J. Wong
2023-12-27 13:04   ` [PATCH 14/14] xfs: update btree keys correctly when _insrec splits an inode root block Darrick J. Wong
2023-12-31 19:53 ` [PATCHSET v2.0 08/17] xfsprogs: enable in-core block reservation for rt metadata Darrick J. Wong
2023-12-27 13:05   ` [PATCH 1/2] xfs: simplify xfs_ag_resv_free signature Darrick J. Wong
2023-12-27 13:05   ` [PATCH 2/2] xfs: allow inode-based btrees to reserve space in the data device Darrick J. Wong
2023-12-31 19:54 ` [PATCHSET v2.0 09/17] xfsprogs: extent free log intent cleanups Darrick J. Wong
2023-12-27 13:05   ` [PATCH 1/8] xfs: clean up extent free log intent item tracepoint callsites Darrick J. Wong
2023-12-27 13:05   ` [PATCH 2/8] xfs: convert "skip_discard" to a proper flags bitset Darrick J. Wong
2023-12-27 13:06   ` [PATCH 3/8] xfs: pass the fsbno to xfs_perag_intent_get Darrick J. Wong
2023-12-27 13:06   ` [PATCH 4/8] xfs: add a xefi_entry helper Darrick J. Wong
2023-12-27 13:06   ` [PATCH 5/8] xfs: reuse xfs_extent_free_cancel_item Darrick J. Wong
2023-12-27 13:06   ` [PATCH 6/8] xfs: remove duplicate asserts in xfs_defer_extent_free Darrick J. Wong
2023-12-27 13:07   ` [PATCH 7/8] xfs: remove xfs_defer_agfl_block Darrick J. Wong
2023-12-27 13:07   ` [PATCH 8/8] xfs: move xfs_extent_free_defer_add to xfs_extfree_item.c Darrick J. Wong
2023-12-31 19:54 ` [PATCHSET v2.0 10/17] xfsprogs: widen EFI format to support rt Darrick J. Wong
2023-12-27 13:07   ` [PATCH 1/3] xfs: support logging EFIs for realtime extents Darrick J. Wong
2023-12-27 13:07   ` [PATCH 2/3] xfs: support error injection when freeing rt extents Darrick J. Wong
2023-12-27 13:08   ` [PATCH 3/3] xfs_logprint: report realtime EFIs Darrick J. Wong
2023-12-31 19:54 ` [PATCHSET v2.0 11/17] xfsprogs: rmap log intent cleanups Darrick J. Wong
2023-12-27 13:08   ` [PATCH 1/9] xfs: attach rtgroup objects to btree cursors Darrick J. Wong
2023-12-27 13:08   ` [PATCH 2/9] xfs: give rmap btree cursor error tracepoints their own class Darrick J. Wong
2023-12-27 13:08   ` [PATCH 3/9] xfs: prepare rmap btree tracepoints for widening Darrick J. Wong
2023-12-27 13:09   ` [PATCH 4/9] xfs: clean up rmap log intent item tracepoint callsites Darrick J. Wong
2023-12-27 13:09   ` [PATCH 5/9] xfs: add a ri_entry helper Darrick J. Wong
2023-12-27 13:09   ` [PATCH 6/9] xfs: reuse xfs_rmap_update_cancel_item Darrick J. Wong
2023-12-27 13:09   ` [PATCH 7/9] xfs: don't bother calling xfs_rmap_finish_one_cleanup in xfs_rmap_finish_one Darrick J. Wong
2023-12-27 13:10   ` [PATCH 8/9] xfs: simplify usage of the rcur local variable " Darrick J. Wong
2023-12-27 13:10   ` [PATCH 9/9] xfs: move xfs_rmap_update_defer_add to xfs_rmap_item.c Darrick J. Wong
2023-12-31 19:54 ` [PATCHSET v2.0 12/17] xfsprogs: realtime reverse-mapping support Darrick J. Wong
2023-12-27 13:10   ` [PATCH 01/47] xfs: simplify the xfs_rmap_{alloc,free}_extent calling conventions Darrick J. Wong
2023-12-27 13:11   ` [PATCH 02/47] xfs: introduce realtime rmap btree definitions Darrick J. Wong
2023-12-27 13:11   ` [PATCH 03/47] xfs: define the on-disk realtime rmap btree format Darrick J. Wong
2023-12-27 13:11   ` [PATCH 04/47] xfs: realtime rmap btree transaction reservations Darrick J. Wong
2023-12-27 13:11   ` [PATCH 05/47] xfs: add realtime rmap btree operations Darrick J. Wong
2023-12-27 13:12   ` [PATCH 06/47] xfs: prepare rmap functions to deal with rtrmapbt Darrick J. Wong
2023-12-27 13:12   ` [PATCH 07/47] xfs: add a realtime flag to the rmap update log redo items Darrick J. Wong
2023-12-27 13:12   ` [PATCH 08/47] xfs: add realtime reverse map inode to metadata directory Darrick J. Wong
2023-12-27 13:12   ` [PATCH 09/47] xfs: add metadata reservations for realtime rmap btrees Darrick J. Wong
2023-12-27 13:13   ` [PATCH 10/47] xfs: wire up a new inode fork type for the realtime rmap Darrick J. Wong
2023-12-27 13:13   ` [PATCH 11/47] xfs: allow inodes with zero extents but nonzero nblocks Darrick J. Wong
2023-12-27 13:13   ` [PATCH 12/47] xfs: use realtime EFI to free extents when realtime rmap is enabled Darrick J. Wong
2023-12-27 13:13   ` [PATCH 13/47] xfs: wire up rmap map and unmap to the realtime rmapbt Darrick J. Wong
2023-12-27 13:14   ` [PATCH 14/47] xfs: create routine to allocate and initialize a realtime rmap btree inode Darrick J. Wong
2023-12-27 13:14   ` [PATCH 15/47] xfs: report realtime rmap btree corruption errors to the health system Darrick J. Wong
2023-12-27 13:14   ` [PATCH 16/47] xfs: allow queued realtime intents to drain before scrubbing Darrick J. Wong
2023-12-27 13:14   ` [PATCH 17/47] xfs: scrub the realtime rmapbt Darrick J. Wong
2023-12-27 13:15   ` [PATCH 18/47] xfs: scrub the metadir path of rt rmap btree files Darrick J. Wong
2023-12-27 13:15   ` [PATCH 19/47] xfs: online repair of the realtime rmap btree Darrick J. Wong
2023-12-27 13:15   ` [PATCH 20/47] xfs: create a shadow rmap btree during realtime rmap repair Darrick J. Wong
2023-12-27 13:15   ` [PATCH 21/47] xfs: hook live realtime rmap operations during a repair operation Darrick J. Wong
2023-12-27 13:16   ` [PATCH 22/47] xfs_db: display the realtime rmap btree contents Darrick J. Wong
2023-12-27 13:16   ` [PATCH 23/47] xfs_db: support the realtime rmapbt Darrick J. Wong
2023-12-27 13:16   ` [PATCH 24/47] xfs_db: support rudimentary checks of the rtrmap btree Darrick J. Wong
2023-12-27 13:17   ` [PATCH 25/47] xfs_db: copy the realtime rmap btree Darrick J. Wong
2023-12-27 13:17   ` [PATCH 26/47] xfs_db: make fsmap query the realtime reverse mapping tree Darrick J. Wong
2023-12-27 13:17   ` [PATCH 27/47] xfs_io: support scrubbing rtgroup metadata paths Darrick J. Wong
2023-12-27 13:17   ` [PATCH 28/47] libfrog: enable scrubbng of the realtime rmap Darrick J. Wong
2023-12-27 13:18   ` [PATCH 29/47] xfs_scrub: check rtrmapbt metadata directory connections Darrick J. Wong
2023-12-27 13:18   ` [PATCH 30/47] xfs_scrub: retest metadata across scrub groups after a repair Darrick J. Wong
2023-12-27 13:18   ` [PATCH 31/47] xfs_spaceman: report health status of the realtime rmap btree Darrick J. Wong
2023-12-27 13:18   ` [PATCH 32/47] libxfs: dirty buffers should be marked uptodate too Darrick J. Wong
2023-12-27 13:19   ` [PATCH 33/47] xfs_repair: flag suspect long-format btree blocks Darrick J. Wong
2023-12-27 13:19   ` [PATCH 34/47] xfs_repair: use realtime rmap btree data to check block types Darrick J. Wong
2023-12-27 13:19   ` [PATCH 35/47] xfs_repair: create a new set of incore rmap information for rt groups Darrick J. Wong
2023-12-27 13:19   ` [PATCH 36/47] xfs_repair: collect relatime reverse-mapping data for refcount/rmap tree rebuilding Darrick J. Wong
2023-12-27 13:20   ` [PATCH 37/47] xfs_repair: refactor realtime inode check Darrick J. Wong
2023-12-27 13:20   ` [PATCH 38/47] xfs_repair: find and mark the rtrmapbt inodes Darrick J. Wong
2023-12-27 13:20   ` [PATCH 39/47] xfs_repair: check existing realtime rmapbt entries against observed rmaps Darrick J. Wong
2023-12-27 13:20   ` [PATCH 40/47] xfs_repair: always check realtime file mappings against incore info Darrick J. Wong
2023-12-27 13:21   ` [PATCH 41/47] xfs_repair: rebuild the realtime rmap btree Darrick J. Wong
2023-12-27 13:21   ` [PATCH 42/47] xfs_repair: check for global free space concerns with default btree slack levels Darrick J. Wong
2023-12-27 13:21   ` [PATCH 43/47] xfs_repair: rebuild the bmap btree for realtime files Darrick J. Wong
2023-12-27 13:21   ` [PATCH 44/47] xfs_repair: reserve per-AG space while rebuilding rt metadata Darrick J. Wong
2023-12-27 13:22   ` [PATCH 45/47] xfs_repair: allow sysadmins to add realtime reverse mapping indexes Darrick J. Wong
2023-12-27 13:22   ` [PATCH 46/47] xfs_logprint: report realtime RUIs Darrick J. Wong
2023-12-27 13:22   ` [PATCH 47/47] mkfs: create the realtime rmap inode Darrick J. Wong
2023-12-31 19:55 ` [PATCHSET v2.0 13/17] xfsprogs: file write utility refactoring Darrick J. Wong
2023-12-27 13:23   ` [PATCH 1/4] libxfs: resync libxfs_alloc_file_space interface with the kernel Darrick J. Wong
2023-12-27 13:23   ` [PATCH 2/4] mkfs: use libxfs_alloc_file_space for rtinit Darrick J. Wong
2023-12-27 13:23   ` [PATCH 3/4] xfs_repair: use libxfs_alloc_file_space to reallocate rt metadata Darrick J. Wong
2023-12-27 13:23   ` [PATCH 4/4] mkfs: use file write helper to populate files Darrick J. Wong
2023-12-31 19:55 ` [PATCHSET v2.0 14/17] xfsprogs: refcount log intent cleanups Darrick J. Wong
2023-12-27 13:24   ` [PATCH 1/9] xfs: give refcount btree cursor error tracepoints their own class Darrick J. Wong
2023-12-27 13:24   ` [PATCH 2/9] xfs: create specialized classes for refcount tracepoints Darrick J. Wong
2023-12-27 13:24   ` [PATCH 3/9] xfs: prepare refcount btree tracepoints for widening Darrick J. Wong
2023-12-27 13:24   ` [PATCH 4/9] xfs: clean up refcount log intent item tracepoint callsites Darrick J. Wong
2023-12-27 13:25   ` [PATCH 5/9] xfs: add a ci_entry helper Darrick J. Wong
2023-12-27 13:25   ` [PATCH 6/9] xfs: reuse xfs_refcount_update_cancel_item Darrick J. Wong
2023-12-27 13:25   ` [PATCH 7/9] xfs: don't bother calling xfs_refcount_finish_one_cleanup in xfs_refcount_finish_one Darrick J. Wong
2023-12-27 13:25   ` [PATCH 8/9] xfs: simplify usage of the rcur local variable " Darrick J. Wong
2023-12-27 13:26   ` [PATCH 9/9] xfs: move xfs_refcount_update_defer_add to xfs_refcount_item.c Darrick J. Wong
2023-12-31 19:55 ` [PATCHSET v2.0 15/17] xfsprogs: reflink on the realtime device Darrick J. Wong
2023-12-27 13:26   ` [PATCH 01/42] xfs: introduce realtime refcount btree definitions Darrick J. Wong
2023-12-27 13:26   ` [PATCH 02/42] xfs: namespace the maximum length/refcount symbols Darrick J. Wong
2023-12-27 13:26   ` [PATCH 03/42] xfs: define the on-disk realtime refcount btree format Darrick J. Wong
2023-12-27 13:27   ` [PATCH 04/42] xfs: realtime refcount btree transaction reservations Darrick J. Wong
2023-12-27 13:27   ` [PATCH 05/42] xfs: add realtime refcount btree operations Darrick J. Wong
2023-12-27 13:27   ` [PATCH 06/42] xfs: prepare refcount functions to deal with rtrefcountbt Darrick J. Wong
2023-12-27 13:27   ` [PATCH 07/42] xfs: add a realtime flag to the refcount update log redo items Darrick J. Wong
2023-12-27 13:28   ` [PATCH 08/42] xfs: add realtime refcount btree inode to metadata directory Darrick J. Wong
2023-12-27 13:28   ` [PATCH 09/42] xfs: add metadata reservations for realtime refcount btree Darrick J. Wong
2023-12-27 13:28   ` [PATCH 10/42] xfs: wire up a new inode fork type for the realtime refcount Darrick J. Wong
2023-12-27 13:29   ` [PATCH 11/42] xfs: wire up realtime refcount btree cursors Darrick J. Wong
2023-12-27 13:29   ` [PATCH 12/42] xfs: create routine to allocate and initialize a realtime refcount btree inode Darrick J. Wong
2023-12-27 13:29   ` [PATCH 13/42] xfs: update rmap to allow cow staging extents in the rt rmap Darrick J. Wong
2023-12-27 13:29   ` [PATCH 14/42] xfs: compute rtrmap btree max levels when reflink enabled Darrick J. Wong
2023-12-27 13:30   ` [PATCH 15/42] xfs: allow inodes to have the realtime and reflink flags Darrick J. Wong
2023-12-27 13:30   ` [PATCH 16/42] xfs: refcover CoW leftovers in the realtime volume Darrick J. Wong
2023-12-27 13:30   ` [PATCH 17/42] xfs: fix xfs_get_extsz_hint behavior with realtime alwayscow files Darrick J. Wong
2023-12-27 13:30   ` [PATCH 18/42] xfs: apply rt extent alignment constraints to CoW extsize hint Darrick J. Wong
2023-12-27 13:31   ` [PATCH 19/42] xfs: enable extent size hints for CoW operations Darrick J. Wong
2023-12-27 13:31   ` [PATCH 20/42] xfs: report realtime refcount btree corruption errors to the health system Darrick J. Wong
2023-12-27 13:31   ` [PATCH 21/42] xfs: scrub the realtime refcount btree Darrick J. Wong
2023-12-27 13:31   ` [PATCH 22/42] xfs: scrub the metadir path of rt refcount btree files Darrick J. Wong
2023-12-27 13:32   ` [PATCH 23/42] libfrog: enable scrubbing of the realtime refcount data Darrick J. Wong
2023-12-27 13:32   ` [PATCH 24/42] xfs_db: display the realtime refcount btree contents Darrick J. Wong
2023-12-27 13:32   ` [PATCH 25/42] xfs_db: support the realtime refcountbt Darrick J. Wong
2023-12-27 13:32   ` [PATCH 26/42] xfs_db: widen block type mask to 64 bits Darrick J. Wong
2023-12-27 13:33   ` [PATCH 27/42] xfs_db: support rudimentary checks of the rtrefcount btree Darrick J. Wong
2023-12-27 13:33   ` [PATCH 28/42] xfs_db: copy the realtime refcount btree Darrick J. Wong
2023-12-27 13:33   ` [PATCH 29/42] xfs_spaceman: report health of " Darrick J. Wong
2023-12-27 13:33   ` [PATCH 30/42] xfs_repair: allow CoW staging extents in the realtime rmap records Darrick J. Wong
2023-12-27 13:34   ` [PATCH 31/42] xfs_repair: use realtime refcount btree data to check block types Darrick J. Wong
2023-12-27 13:34   ` [PATCH 32/42] xfs_repair: find and mark the rtrefcountbt inode Darrick J. Wong
2023-12-27 13:34   ` [PATCH 33/42] xfs_repair: compute refcount data for the realtime groups Darrick J. Wong
2023-12-27 13:35   ` [PATCH 34/42] xfs_repair: check existing realtime refcountbt entries against observed refcounts Darrick J. Wong
2023-12-27 13:35   ` [PATCH 35/42] xfs_repair: reject unwritten shared extents Darrick J. Wong
2023-12-27 13:35   ` [PATCH 36/42] xfs_repair: rebuild the realtime refcount btree Darrick J. Wong
2023-12-27 13:35   ` [PATCH 37/42] xfs_repair: allow realtime files to have the reflink flag set Darrick J. Wong
2023-12-27 13:36   ` [PATCH 38/42] xfs_repair: validate CoW extent size hint on rtinherit directories Darrick J. Wong
2023-12-27 13:36   ` [PATCH 39/42] xfs_repair: allow sysadmins to add realtime reflink Darrick J. Wong
2023-12-27 13:36   ` [PATCH 40/42] xfs_logprint: report realtime CUIs Darrick J. Wong
2023-12-27 13:36   ` [PATCH 41/42] mkfs: validate CoW extent size hint when rtinherit is set Darrick J. Wong
2023-12-27 13:37   ` [PATCH 42/42] mkfs: enable reflink on the realtime device Darrick J. Wong
2023-12-31 19:55 ` [PATCHSET v2.0 16/17] xfsprogs: reflink with large realtime extents Darrick J. Wong
2023-12-27 13:37   ` [PATCH 1/3] xfs: enable extent size hints for CoW when rtextsize > 1 Darrick J. Wong
2023-12-27 13:37   ` [PATCH 2/3] xfs: fix integer overflow when validating extent size hints Darrick J. Wong
2023-12-27 13:37   ` [PATCH 3/3] mkfs: enable reflink with realtime extent sizes > 1 Darrick J. Wong
2023-12-31 19:56 ` [PATCHSET v2.0 17/17] xfsprogs: enable quota for realtime voluems Darrick J. Wong
2023-12-27 13:38   ` [PATCH 1/1] xfs_quota: report warning limits for realtime space quotas Darrick J. Wong
2023-12-31 20:00 ` [PATCHSET v2.0 1/9] fstests: test XFS metadata directories Darrick J. Wong
2023-12-27 13:50   ` [PATCH 01/11] xfs/122: fix metadirino Darrick J. Wong
2023-12-27 13:50   ` [PATCH 02/11] various: fix finding metadata inode numbers when metadir is enabled Darrick J. Wong
2023-12-27 13:50   ` [PATCH 03/11] xfs/{030,033,178}: forcibly disable metadata directory trees Darrick J. Wong
2023-12-27 13:50   ` [PATCH 04/11] common/repair: patch up repair sb inode value complaints Darrick J. Wong
2023-12-27 13:51   ` [PATCH 05/11] xfs/206: update for metadata directory support Darrick J. Wong
2023-12-27 13:51   ` [PATCH 06/11] xfs/{050,144,153,299,330}: update quota reports to handle metadir trees Darrick J. Wong
2023-12-27 13:51   ` [PATCH 07/11] xfs/856: add metadir upgrade to test matrix Darrick J. Wong
2023-12-27 13:51   ` [PATCH 08/11] xfs/509: adjust inumbers accounting for metadata directories Darrick J. Wong
2023-12-27 13:52   ` [PATCH 09/11] xfs: create fuzz tests " Darrick J. Wong
2023-12-27 13:52   ` [PATCH 10/11] xfs: baseline golden output for metadata directory fuzz tests Darrick J. Wong
2023-12-27 13:52   ` [PATCH 11/11] xfs: test metapath repairs Darrick J. Wong
2023-12-31 20:00 ` [PATCHSET v2.0 2/9] xfsprogs: shard the realtime section Darrick J. Wong
2023-12-27 13:53   ` [PATCH 01/17] common/populate: refactor caching of metadumps to a helper Darrick J. Wong
2023-12-27 13:53   ` [PATCH 02/17] common/xfs: wipe external logs during mdrestore operations Darrick J. Wong
2023-12-27 13:53   ` [PATCH 03/17] common/ext4: reformat " Darrick J. Wong
2023-12-27 13:53   ` [PATCH 04/17] xfs: use metadump v2 format by default Darrick J. Wong
2023-12-27 13:54   ` [PATCH 05/17] common/xfs: capture external logs during metadump/mdrestore Darrick J. Wong
2023-12-27 13:54   ` [PATCH 06/17] xfs/122: update for rtgroups Darrick J. Wong
2023-12-27 13:54   ` [PATCH 07/17] punch-alternating: detect xfs realtime files with large allocation units Darrick J. Wong
2023-12-27 13:54   ` [PATCH 08/17] xfs/206: update mkfs filtering for rt groups feature Darrick J. Wong
2023-12-27 13:55   ` [PATCH 09/17] common: pass the realtime device to xfs_db when possible Darrick J. Wong
2023-12-27 13:55   ` [PATCH 10/17] common: filter rtgroups when we're disabling metadir Darrick J. Wong
2023-12-27 13:55   ` [PATCH 11/17] xfs/185: update for rtgroups Darrick J. Wong
2023-12-27 13:55   ` [PATCH 12/17] xfs/449: update test to know about xfs_db -R Darrick J. Wong
2023-12-27 13:56   ` [PATCH 13/17] xfs/122: update for rtbitmap headers Darrick J. Wong
2023-12-27 13:56   ` [PATCH 14/17] xfs/122: udpate test to pick up rtword/suminfo ondisk unions Darrick J. Wong
2023-12-27 13:56   ` [PATCH 15/17] xfs/27[46],xfs/556: fix tests to deal with rtgroups output in bmap/fsmap commands Darrick J. Wong
2023-12-27 13:56   ` [PATCH 16/17] common/xfs: capture realtime devices during metadump/mdrestore Darrick J. Wong
2023-12-27 13:57   ` [PATCH 17/17] common/fuzzy: adapt the scrub stress tests to support rtgroups Darrick J. Wong
2023-12-31 20:00 ` [PATCHSET v2.0 3/9] fstests: enable FITRIM for the realtime section Darrick J. Wong
2023-12-27 13:57   ` [PATCH 1/2] xfs: refactor statfs field extraction Darrick J. Wong
2023-12-27 13:57   ` [PATCH 2/2] common/xfs: FITRIM now supports realtime volumes Darrick J. Wong
2023-12-31 20:00 ` [PATCHSET v2.0 4/9] fstests: fixes for realtime rmap Darrick J. Wong
2023-12-27 13:57   ` [PATCH 01/13] xfs: fix tests that try to access the realtime rmap inode Darrick J. Wong
2023-12-27 13:58   ` [PATCH 02/13] fuzz: for fuzzing the rtrmapbt, find the path to the rt rmap btree file Darrick J. Wong
2023-12-27 13:58   ` [PATCH 03/13] xfs: race fsstress with realtime rmap btree scrub and repair Darrick J. Wong
2023-12-27 13:58   ` [PATCH 04/13] xfs/856: add rtrmapbt upgrade to test matrix Darrick J. Wong
2023-12-27 13:59   ` [PATCH 05/13] xfs/122: update for rtgroups-based realtime rmap btrees Darrick J. Wong
2023-12-27 13:59   ` [PATCH 06/13] xfs: fix various problems with fsmap detecting the data device Darrick J. Wong
2023-12-27 13:59   ` [PATCH 07/13] xfs/341: update test for rtgroup-based rmap Darrick J. Wong
2023-12-27 13:59   ` [PATCH 08/13] xfs/3{43,32}: adapt tests for rt extent size greater than 1 Darrick J. Wong
2023-12-27 14:00   ` [PATCH 09/13] xfs: skip tests if formatting small filesystem fails Darrick J. Wong
2023-12-27 14:00   ` [PATCH 10/13] xfs/443: use file allocation unit, not dbsize Darrick J. Wong
2023-12-27 14:00   ` [PATCH 11/13] populate: adjust rtrmap calculations for rtgroups Darrick J. Wong
2023-12-27 14:00   ` [PATCH 12/13] populate: check that we created a realtime rmap btree of the given height Darrick J. Wong
2023-12-27 14:01   ` [PATCH 13/13] fuzzy: create missing fuzz tests for rt rmap btrees Darrick J. Wong
2023-12-31 20:01 ` [PATCHSET v2.0 5/9] fstests: establish baseline for realtime rmap fuzz tests Darrick J. Wong
2023-12-27 14:01   ` [PATCH 1/1] fuzzy: create known output for rt rmap btree " Darrick J. Wong
2023-12-31 20:01 ` [PATCHSET v2.0 6/9] fstests: reflink on the realtime device Darrick J. Wong
2023-12-27 14:01   ` [PATCH 1/9] xfs/122: update fields for realtime reflink Darrick J. Wong
2023-12-27 14:01   ` [PATCH 2/9] common/populate: create realtime refcount btree Darrick J. Wong
2023-12-27 14:02   ` [PATCH 3/9] xfs: create fuzz tests for the " Darrick J. Wong
2023-12-27 14:02   ` [PATCH 4/9] xfs/27[24]: adapt for checking files on the realtime volume Darrick J. Wong
2023-12-27 14:02   ` [PATCH 5/9] xfs: race fsstress with realtime refcount btree scrub and repair Darrick J. Wong
2023-12-27 14:02   ` [PATCH 6/9] xfs: remove xfs/131 now that we allow reflink on realtime volumes Darrick J. Wong
2023-12-27 14:03   ` [PATCH 7/9] xfs/856: add rtreflink upgrade to test matrix Darrick J. Wong
2023-12-27 14:03   ` [PATCH 8/9] generic/331,xfs/240: support files that skip delayed allocation Darrick J. Wong
2023-12-27 14:03   ` [PATCH 9/9] common/xfs: fix _xfs_get_file_block_size when rtinherit is set and no rt section Darrick J. Wong
2023-12-31 20:01 ` [PATCHSET v2.0 7/9] fstests: establish baseline for realtime reflink fuzz tests Darrick J. Wong
2023-12-27 14:03   ` [PATCH 1/1] xfs: baseline golden output for rt refcount btree " Darrick J. Wong
2023-12-31 20:01 ` [PATCHSET v2.0 8/9] fstests: reflink with large realtime extents Darrick J. Wong
2023-12-27 14:04   ` [PATCH 1/5] xfs: make sure that CoW will write around when rextsize > 1 Darrick J. Wong
2023-12-27 14:04   ` [PATCH 2/5] xfs: skip cowextsize hint fragmentation tests on realtime volumes Darrick J. Wong
2023-12-27 14:04   ` [PATCH 3/5] misc: add more congruent oplen testing Darrick J. Wong
2023-12-27 14:05   ` [PATCH 4/5] xfs: test COWing entire rt extents Darrick J. Wong
2023-12-27 14:05   ` [PATCH 5/5] generic/303: avoid test failures on weird rt extent sizes Darrick J. Wong
2023-12-31 20:02 ` [PATCHSET v2.0 9/9] fstests: functional tests for rt quota Darrick J. Wong
2023-12-27 14:05   ` [PATCH 1/3] common: enable testing of realtime quota when supported Darrick J. Wong
2023-12-27 14:05   ` [PATCH 2/3] xfs: fix quota tests to adapt to realtime quota Darrick J. Wong
2023-12-27 14:06   ` [PATCH 3/3] xfs: regression testing of quota on the realtime device Darrick J. Wong
2023-12-31 20:03 ` [PATCHSET v2.0 1/4] xfs-documentation: document metadata directories Darrick J. Wong
2023-12-27 14:08   ` [PATCH 1/1] design: document the changes required to handle " Darrick J. Wong
2023-12-31 20:03 ` [PATCHSET v2.0 2/4] xfs-documentation: shard the realtime section Darrick J. Wong
2023-12-27 14:08   ` [PATCH 1/2] design: move discussion of realtime volumes to a separate section Darrick J. Wong
2023-12-27 14:08   ` [PATCH 2/2] design: document realtime groups Darrick J. Wong
2023-12-31 20:04 ` [PATCHSET v2.0 3/4] xfs-documentation: realtime reverse-mapping support Darrick J. Wong
2023-12-27 14:08   ` [PATCH 1/1] design: document the revisions to the realtime rmap formats Darrick J. Wong
2023-12-31 20:04 ` [PATCHSET v2.0 4/4] xfs-documentation: reflink on the realtime device Darrick J. Wong
2023-12-27 14:09   ` [PATCH 1/1] design: document changes for the realtime refcount btree Darrick J. Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=170404845074.1760491.14974500736996975266.stgit@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).