public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: aalbersh@kernel.org
Cc: hch@lst.de, linux-xfs@vger.kernel.org
Subject: [PATCH v1.1] libfrog: wrap handle construction code
Date: Thu, 20 Feb 2025 13:36:00 -0800	[thread overview]
Message-ID: <20250220213600.GS21808@frogsfrogsfrogs> (raw)
In-Reply-To: <173888086121.2738568.17449625667584946105.stgit@frogsfrogsfrogs>

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

Clean up all the open-coded logic to construct a file handle from a
fshandle and some bulkstat/parent pointer information.  The new
functions are stashed in a private header file to avoid leaking the
details of xfs_handle construction in the public libhandle headers.

I tried moving the code to libhandle, but I don't entirely like the
result.  The libhandle functions pass around handles as arbitrary binary
blobs that come from and are sent to the kernel, meaning that the
interface is full of (void *, size_t) tuples.  Putting these new
functions in libhandle breaks that abstraction because now clients know
that they can deal with a struct xfs_handle.

We could fix that leak by changing it to a (void *, size_t) tuple, but
then we'd have to validate the size_t or returns -1 having set errno,
which then means that all the client code now has to have error handling
for a case that we're fairly sure can't be true.  This is overkill for
xfsprogs code that knows better, because we can trust ourselves to know
the exact layout of a handle.

So this nice compact code:

	memcpy(&handle.ha_fsid, file->fshandle, file->fshandle_len);
	handle.ha_fid.fid_len = sizeof(xfs_fid_t) -
				sizeof(handle.ha_fid.fid_len);

becomes:

	ret = handle_from_fshandle(&handle, file->fshandle,
			file->fshandle_len);
	if (ret) {
		perror("what?");
		return -1;
	}

Which is much more verbose code, and right now it exists to handle an
exceptional condition that is not possible.  If someone outside of
xfsprogs would like this sort of functionality in libhandle I'm all for
adding it, but with zero demand from external users, I prefer to keep
things simple.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
v1.1: explain why this isn't in libhandle for now
---
 libfrog/handle_priv.h |   55 +++++++++++++++++++++++++++++++++++++++++++++++++
 io/parent.c           |    9 +++-----
 libfrog/Makefile      |    1 +
 scrub/common.c        |    9 +++-----
 scrub/inodes.c        |   13 ++++--------
 scrub/phase5.c        |   12 ++++-------
 spaceman/health.c     |    9 +++-----
 7 files changed, 73 insertions(+), 35 deletions(-)
 create mode 100644 libfrog/handle_priv.h

diff --git a/libfrog/handle_priv.h b/libfrog/handle_priv.h
new file mode 100644
index 00000000000000..8c3634c40de1c8
--- /dev/null
+++ b/libfrog/handle_priv.h
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2025 Oracle.  All Rights Reserved.
+ * Author: Darrick J. Wong <djwong@kernel.org>
+ */
+#ifndef __LIBFROG_HANDLE_PRIV_H__
+#define __LIBFROG_HANDLE_PRIV_H__
+
+/*
+ * Private helpers to construct an xfs_handle without publishing those details
+ * in the public libhandle header files.
+ */
+
+/*
+ * Fills out the fsid part of a handle.  This does not initialize the fid part
+ * of the handle; use either of the two functions below.
+ */
+static inline void
+handle_from_fshandle(
+	struct xfs_handle	*handle,
+	const void		*fshandle,
+	size_t			fshandle_len)
+{
+	ASSERT(fshandle_len == sizeof(xfs_fsid_t));
+
+	memcpy(&handle->ha_fsid, fshandle, sizeof(handle->ha_fsid));
+	handle->ha_fid.fid_len = sizeof(xfs_fid_t) -
+			sizeof(handle->ha_fid.fid_len);
+	handle->ha_fid.fid_pad = 0;
+	handle->ha_fid.fid_ino = 0;
+	handle->ha_fid.fid_gen = 0;
+}
+
+/* Fill out the fid part of a handle from raw components. */
+static inline void
+handle_from_inogen(
+	struct xfs_handle	*handle,
+	uint64_t		ino,
+	uint32_t		gen)
+{
+	handle->ha_fid.fid_ino = ino;
+	handle->ha_fid.fid_gen = gen;
+}
+
+/* Fill out the fid part of a handle. */
+static inline void
+handle_from_bulkstat(
+	struct xfs_handle		*handle,
+	const struct xfs_bulkstat	*bstat)
+{
+	handle->ha_fid.fid_ino = bstat->bs_ino;
+	handle->ha_fid.fid_gen = bstat->bs_gen;
+}
+
+#endif /* __LIBFROG_HANDLE_PRIV_H__ */
diff --git a/io/parent.c b/io/parent.c
index 8db93d98755289..3ba3aef48cb9be 100644
--- a/io/parent.c
+++ b/io/parent.c
@@ -11,6 +11,7 @@
 #include "handle.h"
 #include "init.h"
 #include "io.h"
+#include "libfrog/handle_priv.h"
 
 static cmdinfo_t parent_cmd;
 static char *mntpt;
@@ -205,12 +206,8 @@ parent_f(
 			return 0;
 		}
 
-		memcpy(&handle, hanp, sizeof(handle));
-		handle.ha_fid.fid_len = sizeof(xfs_fid_t) -
-				sizeof(handle.ha_fid.fid_len);
-		handle.ha_fid.fid_pad = 0;
-		handle.ha_fid.fid_ino = ino;
-		handle.ha_fid.fid_gen = gen;
+		handle_from_fshandle(&handle, hanp, hlen);
+		handle_from_inogen(&handle, ino, gen);
 	} else if (optind != argc) {
 		return command_usage(&parent_cmd);
 	}
diff --git a/libfrog/Makefile b/libfrog/Makefile
index 4da427789411a6..fc7e506d96bbad 100644
--- a/libfrog/Makefile
+++ b/libfrog/Makefile
@@ -53,6 +53,7 @@ fsgeom.h \
 fsproperties.h \
 fsprops.h \
 getparents.h \
+handle_priv.h \
 histogram.h \
 logging.h \
 paths.h \
diff --git a/scrub/common.c b/scrub/common.c
index f86546556f46dd..6eb3c026dc5ac9 100644
--- a/scrub/common.c
+++ b/scrub/common.c
@@ -10,6 +10,7 @@
 #include "platform_defs.h"
 #include "libfrog/paths.h"
 #include "libfrog/getparents.h"
+#include "libfrog/handle_priv.h"
 #include "xfs_scrub.h"
 #include "common.h"
 #include "progress.h"
@@ -414,12 +415,8 @@ scrub_render_ino_descr(
 	if (ctx->mnt.fsgeom.flags & XFS_FSOP_GEOM_FLAGS_PARENT) {
 		struct xfs_handle handle;
 
-		memcpy(&handle.ha_fsid, ctx->fshandle, sizeof(handle.ha_fsid));
-		handle.ha_fid.fid_len = sizeof(xfs_fid_t) -
-				sizeof(handle.ha_fid.fid_len);
-		handle.ha_fid.fid_pad = 0;
-		handle.ha_fid.fid_ino = ino;
-		handle.ha_fid.fid_gen = gen;
+		handle_from_fshandle(&handle, ctx->fshandle, ctx->fshandle_len);
+		handle_from_inogen(&handle, ino, gen);
 
 		ret = handle_to_path(&handle, sizeof(struct xfs_handle), 4096,
 				buf, buflen);
diff --git a/scrub/inodes.c b/scrub/inodes.c
index 3fe759e8f4867d..2b492a634ea3b2 100644
--- a/scrub/inodes.c
+++ b/scrub/inodes.c
@@ -19,6 +19,7 @@
 #include "descr.h"
 #include "libfrog/fsgeom.h"
 #include "libfrog/bulkstat.h"
+#include "libfrog/handle_priv.h"
 
 /*
  * Iterate a range of inodes.
@@ -209,7 +210,7 @@ scan_ag_bulkstat(
 	xfs_agnumber_t		agno,
 	void			*arg)
 {
-	struct xfs_handle	handle = { };
+	struct xfs_handle	handle;
 	struct scrub_ctx	*ctx = (struct scrub_ctx *)wq->wq_ctx;
 	struct scan_ichunk	*ichunk = arg;
 	struct xfs_inumbers_req	*ireq = ichunk_to_inumbers(ichunk);
@@ -225,12 +226,7 @@ scan_ag_bulkstat(
 	DEFINE_DESCR(dsc_inumbers, ctx, render_inumbers_from_agno);
 
 	descr_set(&dsc_inumbers, &agno);
-
-	memcpy(&handle.ha_fsid, ctx->fshandle, sizeof(handle.ha_fsid));
-	handle.ha_fid.fid_len = sizeof(xfs_fid_t) -
-			sizeof(handle.ha_fid.fid_len);
-	handle.ha_fid.fid_pad = 0;
-
+	handle_from_fshandle(&handle, ctx->fshandle, ctx->fshandle_len);
 retry:
 	bulkstat_for_inumbers(ctx, &dsc_inumbers, inumbers, breq);
 
@@ -244,8 +240,7 @@ scan_ag_bulkstat(
 			continue;
 
 		descr_set(&dsc_bulkstat, bs);
-		handle.ha_fid.fid_ino = scan_ino;
-		handle.ha_fid.fid_gen = bs->bs_gen;
+		handle_from_bulkstat(&handle, bs);
 		error = si->fn(ctx, &handle, bs, si->arg);
 		switch (error) {
 		case 0:
diff --git a/scrub/phase5.c b/scrub/phase5.c
index 22a22915dbc68d..6460d00f30f4bd 100644
--- a/scrub/phase5.c
+++ b/scrub/phase5.c
@@ -18,6 +18,7 @@
 #include "libfrog/bitmap.h"
 #include "libfrog/bulkstat.h"
 #include "libfrog/fakelibattr.h"
+#include "libfrog/handle_priv.h"
 #include "xfs_scrub.h"
 #include "common.h"
 #include "inodes.h"
@@ -474,9 +475,7 @@ retry_deferred_inode(
 	if (error)
 		return error;
 
-	handle->ha_fid.fid_ino = bstat.bs_ino;
-	handle->ha_fid.fid_gen = bstat.bs_gen;
-
+	handle_from_bulkstat(handle, &bstat);
 	return check_inode_names(ncs->ctx, handle, &bstat, ncs);
 }
 
@@ -487,16 +486,13 @@ retry_deferred_inode_range(
 	uint64_t		len,
 	void			*arg)
 {
-	struct xfs_handle	handle = { };
+	struct xfs_handle	handle;
 	struct ncheck_state	*ncs = arg;
 	struct scrub_ctx	*ctx = ncs->ctx;
 	uint64_t		i;
 	int			error;
 
-	memcpy(&handle.ha_fsid, ctx->fshandle, sizeof(handle.ha_fsid));
-	handle.ha_fid.fid_len = sizeof(xfs_fid_t) -
-			sizeof(handle.ha_fid.fid_len);
-	handle.ha_fid.fid_pad = 0;
+	handle_from_fshandle(&handle, ctx->fshandle, ctx->fshandle_len);
 
 	for (i = 0; i < len; i++) {
 		error = retry_deferred_inode(ncs, &handle, ino + i);
diff --git a/spaceman/health.c b/spaceman/health.c
index 4281589324cd44..0d2767df424f27 100644
--- a/spaceman/health.c
+++ b/spaceman/health.c
@@ -14,6 +14,7 @@
 #include "libfrog/bulkstat.h"
 #include "space.h"
 #include "libfrog/getparents.h"
+#include "libfrog/handle_priv.h"
 
 static cmdinfo_t health_cmd;
 static unsigned long long reported;
@@ -317,12 +318,8 @@ report_inode(
 	    (file->xfd.fsgeom.flags & XFS_FSOP_GEOM_FLAGS_PARENT)) {
 		struct xfs_handle handle;
 
-		memcpy(&handle.ha_fsid, file->fshandle, sizeof(handle.ha_fsid));
-		handle.ha_fid.fid_len = sizeof(xfs_fid_t) -
-				sizeof(handle.ha_fid.fid_len);
-		handle.ha_fid.fid_pad = 0;
-		handle.ha_fid.fid_ino = bs->bs_ino;
-		handle.ha_fid.fid_gen = bs->bs_gen;
+		handle_from_fshandle(&handle, file->fshandle, file->fshandle_len);
+		handle_from_bulkstat(&handle, bs);
 
 		ret = handle_to_path(&handle, sizeof(struct xfs_handle), 0,
 				descr, sizeof(descr) - 1);

  parent reply	other threads:[~2025-02-20 21:36 UTC|newest]

Thread overview: 225+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-06 22:21 [PATCHBOMB] xfsprogs: all my changes for 6.14 Darrick J. Wong
2025-02-06 22:29 ` [PATCHSET 1/5] xfs_scrub: fixes and cleanups for inode iteration Darrick J. Wong
2025-02-06 22:30   ` [PATCH 01/17] libxfs: unmap xmbuf pages to avoid disaster Darrick J. Wong
2025-02-07  4:10     ` Christoph Hellwig
2025-02-06 22:31   ` [PATCH 02/17] libxfs: mark xmbuf_{un,}map_page static Darrick J. Wong
2025-02-06 22:31   ` [PATCH 03/17] man: document new XFS_BULK_IREQ_METADIR flag to bulkstat Darrick J. Wong
2025-02-07  4:10     ` Christoph Hellwig
2025-02-06 22:31   ` [PATCH 04/17] libfrog: wrap handle construction code Darrick J. Wong
2025-02-07  4:34     ` Christoph Hellwig
2025-02-07  4:49       ` Darrick J. Wong
2025-02-07 17:00         ` Darrick J. Wong
2025-02-13  4:05           ` Christoph Hellwig
2025-02-13  4:20             ` Darrick J. Wong
2025-02-20 21:36     ` Darrick J. Wong [this message]
2025-02-24 16:58       ` [PATCH v1.1] " Christoph Hellwig
2025-02-06 22:31   ` [PATCH 05/17] xfs_scrub: don't report data loss in unlinked inodes twice Darrick J. Wong
2025-02-07  4:35     ` Christoph Hellwig
2025-02-07  4:46       ` Darrick J. Wong
2025-02-06 22:32   ` [PATCH 06/17] xfs_scrub: call bulkstat directly if we're only scanning user files Darrick J. Wong
2025-02-07  4:37     ` Christoph Hellwig
2025-02-06 22:32   ` [PATCH 07/17] xfs_scrub: remove flags argument from scrub_scan_all_inodes Darrick J. Wong
2025-02-07  4:38     ` Christoph Hellwig
2025-02-06 22:32   ` [PATCH 08/17] xfs_scrub: selectively re-run bulkstat after re-running inumbers Darrick J. Wong
2025-02-07  4:39     ` Christoph Hellwig
2025-02-06 22:33   ` [PATCH 09/17] xfs_scrub: actually iterate all the bulkstat records Darrick J. Wong
2025-02-07  4:40     ` Christoph Hellwig
2025-02-06 22:33   ` [PATCH 10/17] xfs_scrub: don't double-scan inodes during phase 3 Darrick J. Wong
2025-02-07  4:41     ` Christoph Hellwig
2025-02-06 22:33   ` [PATCH 11/17] xfs_scrub: don't (re)set the bulkstat request icount incorrectly Darrick J. Wong
2025-02-07  4:42     ` Christoph Hellwig
2025-02-06 22:33   ` [PATCH 12/17] xfs_scrub: don't complain if bulkstat fails Darrick J. Wong
2025-02-07  4:42     ` Christoph Hellwig
2025-02-06 22:34   ` [PATCH 13/17] xfs_scrub: return early from bulkstat_for_inumbers if no bulkstat data Darrick J. Wong
2025-02-07  4:43     ` Christoph Hellwig
2025-02-06 22:34   ` [PATCH 14/17] xfs_scrub: don't blow away new inodes in bulkstat_single_step Darrick J. Wong
2025-02-07  4:46     ` Christoph Hellwig
2025-02-07  4:50       ` Darrick J. Wong
2025-02-06 22:34   ` [PATCH 15/17] xfs_scrub: hoist the phase3 bulkstat single stepping code Darrick J. Wong
2025-02-07  4:47     ` Christoph Hellwig
2025-02-06 22:34   ` [PATCH 16/17] xfs_scrub: ignore freed inodes when single-stepping during phase 3 Darrick J. Wong
2025-02-07  4:47     ` Christoph Hellwig
2025-02-06 22:35   ` [PATCH 17/17] xfs_scrub: try harder to fill the bulkstat array with bulkstat() Darrick J. Wong
2025-02-07  4:48     ` Christoph Hellwig
2025-02-06 22:29 ` [PATCHSET 2/5] xfsprogs: new libxfs code from kernel 6.14 Darrick J. Wong
2025-02-06 22:35   ` [PATCH 01/56] xfs: tidy up xfs_iroot_realloc Darrick J. Wong
2025-02-06 22:35   ` [PATCH 02/56] xfs: refactor the inode fork memory allocation functions Darrick J. Wong
2025-02-06 22:35   ` [PATCH 03/56] xfs: make xfs_iroot_realloc take the new numrecs instead of deltas Darrick J. Wong
2025-02-06 22:36   ` [PATCH 04/56] xfs: make xfs_iroot_realloc a bmap btree function Darrick J. Wong
2025-02-06 22:36   ` [PATCH 05/56] xfs: tidy up xfs_bmap_broot_realloc a bit Darrick J. Wong
2025-02-06 22:36   ` [PATCH 06/56] xfs: hoist the node iroot update code out of xfs_btree_new_iroot Darrick J. Wong
2025-02-06 22:36   ` [PATCH 07/56] xfs: hoist the node iroot update code out of xfs_btree_kill_iroot Darrick J. Wong
2025-02-06 22:37   ` [PATCH 08/56] xfs: add some rtgroup inode helpers Darrick J. Wong
2025-02-06 22:37   ` [PATCH 09/56] xfs: prepare to reuse the dquot pointer space in struct xfs_inode Darrick J. Wong
2025-02-06 22:37   ` [PATCH 10/56] xfs: simplify the xfs_rmap_{alloc,free}_extent calling conventions Darrick J. Wong
2025-02-06 22:37   ` [PATCH 11/56] xfs: support storing records in the inode core root Darrick J. Wong
2025-02-06 22:38   ` [PATCH 12/56] xfs: allow inode-based btrees to reserve space in the data device Darrick J. Wong
2025-02-06 22:38   ` [PATCH 13/56] xfs: introduce realtime rmap btree ondisk definitions Darrick J. Wong
2025-02-06 22:38   ` [PATCH 14/56] xfs: realtime rmap btree transaction reservations Darrick J. Wong
2025-02-06 22:39   ` [PATCH 15/56] xfs: add realtime rmap btree operations Darrick J. Wong
2025-02-06 22:39   ` [PATCH 16/56] xfs: prepare rmap functions to deal with rtrmapbt Darrick J. Wong
2025-02-06 22:39   ` [PATCH 17/56] xfs: add a realtime flag to the rmap update log redo items Darrick J. Wong
2025-02-06 22:39   ` [PATCH 18/56] xfs: pretty print metadata file types in error messages Darrick J. Wong
2025-02-06 22:40   ` [PATCH 19/56] xfs: support file data forks containing metadata btrees Darrick J. Wong
2025-02-06 22:40   ` [PATCH 20/56] xfs: add realtime reverse map inode to metadata directory Darrick J. Wong
2025-02-06 22:40   ` [PATCH 21/56] xfs: add metadata reservations for realtime rmap btrees Darrick J. Wong
2025-02-06 22:40   ` [PATCH 22/56] xfs: wire up a new metafile type for the realtime rmap Darrick J. Wong
2025-02-06 22:41   ` [PATCH 23/56] xfs: wire up rmap map and unmap to the realtime rmapbt Darrick J. Wong
2025-02-06 22:41   ` [PATCH 24/56] xfs: create routine to allocate and initialize a realtime rmap btree inode Darrick J. Wong
2025-02-06 22:41   ` [PATCH 25/56] xfs: report realtime rmap btree corruption errors to the health system Darrick J. Wong
2025-02-06 22:41   ` [PATCH 26/56] xfs: scrub the realtime rmapbt Darrick J. Wong
2025-02-06 22:42   ` [PATCH 27/56] xfs: scrub the metadir path of rt rmap btree files Darrick J. Wong
2025-02-06 22:42   ` [PATCH 28/56] xfs: online repair of realtime bitmaps for a realtime group Darrick J. Wong
2025-02-06 22:42   ` [PATCH 29/56] xfs: online repair of the realtime rmap btree Darrick J. Wong
2025-02-06 22:42   ` [PATCH 30/56] xfs: create a shadow rmap btree during realtime rmap repair Darrick J. Wong
2025-02-06 22:43   ` [PATCH 31/56] xfs: namespace the maximum length/refcount symbols Darrick J. Wong
2025-02-06 22:43   ` [PATCH 32/56] xfs: introduce realtime refcount btree ondisk definitions Darrick J. Wong
2025-02-06 22:43   ` [PATCH 33/56] xfs: realtime refcount btree transaction reservations Darrick J. Wong
2025-02-06 22:43   ` [PATCH 34/56] xfs: add realtime refcount btree operations Darrick J. Wong
2025-02-06 22:44   ` [PATCH 35/56] xfs: prepare refcount functions to deal with rtrefcountbt Darrick J. Wong
2025-02-06 22:44   ` [PATCH 36/56] xfs: add a realtime flag to the refcount update log redo items Darrick J. Wong
2025-02-06 22:44   ` [PATCH 37/56] xfs: add realtime refcount btree inode to metadata directory Darrick J. Wong
2025-02-06 22:45   ` [PATCH 38/56] xfs: add metadata reservations for realtime refcount btree Darrick J. Wong
2025-02-06 22:45   ` [PATCH 39/56] xfs: wire up a new metafile type for the realtime refcount Darrick J. Wong
2025-02-06 22:45   ` [PATCH 40/56] xfs: wire up realtime refcount btree cursors Darrick J. Wong
2025-02-06 22:45   ` [PATCH 41/56] xfs: create routine to allocate and initialize a realtime refcount btree inode Darrick J. Wong
2025-02-06 22:46   ` [PATCH 42/56] xfs: update rmap to allow cow staging extents in the rt rmap Darrick J. Wong
2025-02-06 22:46   ` [PATCH 43/56] xfs: compute rtrmap btree max levels when reflink enabled Darrick J. Wong
2025-02-06 22:46   ` [PATCH 44/56] xfs: allow inodes to have the realtime and reflink flags Darrick J. Wong
2025-02-06 22:46   ` [PATCH 45/56] xfs: recover CoW leftovers in the realtime volume Darrick J. Wong
2025-02-06 22:47   ` [PATCH 46/56] xfs: fix xfs_get_extsz_hint behavior with realtime alwayscow files Darrick J. Wong
2025-02-06 22:47   ` [PATCH 47/56] xfs: apply rt extent alignment constraints to CoW extsize hint Darrick J. Wong
2025-02-06 22:47   ` [PATCH 48/56] xfs: enable extent size hints for CoW operations Darrick J. Wong
2025-02-06 22:47   ` [PATCH 49/56] xfs: report realtime refcount btree corruption errors to the health system Darrick J. Wong
2025-02-06 22:48   ` [PATCH 50/56] xfs: scrub the realtime refcount btree Darrick J. Wong
2025-02-06 22:48   ` [PATCH 51/56] xfs: scrub the metadir path of rt refcount btree files Darrick J. Wong
2025-02-06 22:48   ` [PATCH 52/56] xfs: fix the entry condition of exact EOF block allocation optimization Darrick J. Wong
2025-02-06 22:48   ` [PATCH 53/56] xfs: mark xfs_dir_isempty static Darrick J. Wong
2025-02-06 22:49   ` [PATCH 54/56] xfs: remove XFS_ILOG_NONCORE Darrick J. Wong
2025-02-06 22:49   ` [PATCH 55/56] xfs: constify feature checks Darrick J. Wong
2025-02-06 22:49   ` [PATCH 56/56] xfs/libxfs: replace kmalloc() and memcpy() with kmemdup() Darrick J. Wong
2025-02-06 22:30 ` [PATCHSET v6.3 3/5] xfsprogs: realtime reverse-mapping support Darrick J. Wong
2025-02-06 22:49   ` [PATCH 01/27] libxfs: compute the rt rmap btree maxlevels during initialization Darrick J. Wong
2025-02-07  5:07     ` Christoph Hellwig
2025-02-06 22:50   ` [PATCH 02/27] libxfs: add a realtime flag to the rmap update log redo items Darrick J. Wong
2025-02-07  5:08     ` Christoph Hellwig
2025-02-06 22:50   ` [PATCH 03/27] libfrog: enable scrubbing of the realtime rmap Darrick J. Wong
2025-02-07  5:08     ` Christoph Hellwig
2025-02-06 22:50   ` [PATCH 04/27] man: document userspace API changes due to rt rmap Darrick J. Wong
2025-02-07  5:08     ` Christoph Hellwig
2025-02-06 22:51   ` [PATCH 05/27] xfs_db: compute average btree height Darrick J. Wong
2025-02-07  5:09     ` Christoph Hellwig
2025-02-06 22:51   ` [PATCH 06/27] xfs_db: don't abort when bmapping on a non-extents/bmbt fork Darrick J. Wong
2025-02-07  5:09     ` Christoph Hellwig
2025-02-06 22:51   ` [PATCH 07/27] xfs_db: display the realtime rmap btree contents Darrick J. Wong
2025-02-07  5:16     ` Christoph Hellwig
2025-02-06 22:51   ` [PATCH 08/27] xfs_db: support the realtime rmapbt Darrick J. Wong
2025-02-07  5:17     ` Christoph Hellwig
2025-02-06 22:52   ` [PATCH 09/27] xfs_db: copy the realtime rmap btree Darrick J. Wong
2025-02-07  5:17     ` Christoph Hellwig
2025-02-06 22:52   ` [PATCH 10/27] xfs_db: make fsmap query the realtime reverse mapping tree Darrick J. Wong
2025-02-07  5:18     ` Christoph Hellwig
2025-02-06 22:52   ` [PATCH 11/27] xfs_db: add an rgresv command Darrick J. Wong
2025-02-07  5:19     ` Christoph Hellwig
2025-02-07  5:24       ` Darrick J. Wong
2025-02-06 22:52   ` [PATCH 12/27] xfs_spaceman: report health status of the realtime rmap btree Darrick J. Wong
2025-02-07  5:19     ` Christoph Hellwig
2025-02-06 22:53   ` [PATCH 13/27] xfs_repair: tidy up rmap_diffkeys Darrick J. Wong
2025-02-07  5:20     ` Christoph Hellwig
2025-02-06 22:53   ` [PATCH 14/27] xfs_repair: flag suspect long-format btree blocks Darrick J. Wong
2025-02-07  5:21     ` Christoph Hellwig
2025-02-06 22:53   ` [PATCH 15/27] xfs_repair: use realtime rmap btree data to check block types Darrick J. Wong
2025-02-07  5:22     ` Christoph Hellwig
2025-02-06 22:53   ` [PATCH 16/27] xfs_repair: create a new set of incore rmap information for rt groups Darrick J. Wong
2025-02-07  5:22     ` Christoph Hellwig
2025-02-06 22:54   ` [PATCH 17/27] xfs_repair: refactor realtime inode check Darrick J. Wong
2025-02-07  5:22     ` Christoph Hellwig
2025-02-06 22:54   ` [PATCH 18/27] xfs_repair: find and mark the rtrmapbt inodes Darrick J. Wong
2025-02-07  5:33     ` Christoph Hellwig
2025-02-06 22:54   ` [PATCH 19/27] xfs_repair: check existing realtime rmapbt entries against observed rmaps Darrick J. Wong
2025-02-07  5:35     ` Christoph Hellwig
2025-02-06 22:54   ` [PATCH 20/27] xfs_repair: always check realtime file mappings against incore info Darrick J. Wong
2025-02-07  5:35     ` Christoph Hellwig
2025-02-06 22:55   ` [PATCH 21/27] xfs_repair: rebuild the realtime rmap btree Darrick J. Wong
2025-02-07  5:54     ` Christoph Hellwig
2025-02-06 22:55   ` [PATCH 22/27] xfs_repair: check for global free space concerns with default btree slack levels Darrick J. Wong
2025-02-07  5:56     ` Christoph Hellwig
2025-02-06 22:55   ` [PATCH 23/27] xfs_repair: rebuild the bmap btree for realtime files Darrick J. Wong
2025-02-07  5:56     ` Christoph Hellwig
2025-02-06 22:55   ` [PATCH 24/27] xfs_repair: reserve per-AG space while rebuilding rt metadata Darrick J. Wong
2025-02-07  5:57     ` Christoph Hellwig
2025-02-06 22:56   ` [PATCH 25/27] xfs_logprint: report realtime RUIs Darrick J. Wong
2025-02-07  5:58     ` Christoph Hellwig
2025-02-07  5:58     ` Christoph Hellwig
2025-02-06 22:56   ` [PATCH 26/27] mkfs: add some rtgroup inode helpers Darrick J. Wong
2025-02-07  5:59     ` Christoph Hellwig
2025-02-07  6:07       ` Darrick J. Wong
2025-02-06 22:56   ` [PATCH 27/27] mkfs: create the realtime rmap inode Darrick J. Wong
2025-02-07  6:00     ` Christoph Hellwig
2025-02-06 22:30 ` [PATCHSET v6.3 4/5] xfsprogs: reflink on the realtime device Darrick J. Wong
2025-02-06 22:57   ` [PATCH 01/22] libxfs: compute the rt refcount btree maxlevels during initialization Darrick J. Wong
2025-02-13  4:20     ` Christoph Hellwig
2025-02-06 22:57   ` [PATCH 02/22] libxfs: add a realtime flag to the refcount update log redo items Darrick J. Wong
2025-02-13  4:20     ` Christoph Hellwig
2025-02-06 22:57   ` [PATCH 03/22] libxfs: apply rt extent alignment constraints to CoW extsize hint Darrick J. Wong
2025-02-13  4:21     ` Christoph Hellwig
2025-02-06 22:57   ` [PATCH 04/22] libfrog: enable scrubbing of the realtime refcount data Darrick J. Wong
2025-02-13  4:21     ` Christoph Hellwig
2025-02-06 22:58   ` [PATCH 05/22] man: document userspace API changes due to rt reflink Darrick J. Wong
2025-02-13  4:21     ` Christoph Hellwig
2025-02-06 22:58   ` [PATCH 06/22] xfs_db: display the realtime refcount btree contents Darrick J. Wong
2025-02-13  4:22     ` Christoph Hellwig
2025-02-06 22:58   ` [PATCH 07/22] xfs_db: support the realtime refcountbt Darrick J. Wong
2025-02-13  4:22     ` Christoph Hellwig
2025-02-06 22:58   ` [PATCH 08/22] xfs_db: copy the realtime refcount btree Darrick J. Wong
2025-02-13  4:23     ` Christoph Hellwig
2025-02-06 22:59   ` [PATCH 09/22] xfs_db: add rtrefcount reservations to the rgresv command Darrick J. Wong
2025-02-13  4:23     ` Christoph Hellwig
2025-02-06 22:59   ` [PATCH 10/22] xfs_spaceman: report health of the realtime refcount btree Darrick J. Wong
2025-02-13  4:24     ` Christoph Hellwig
2025-02-06 22:59   ` [PATCH 11/22] xfs_repair: allow CoW staging extents in the realtime rmap records Darrick J. Wong
2025-02-13  4:24     ` Christoph Hellwig
2025-02-06 22:59   ` [PATCH 12/22] xfs_repair: use realtime refcount btree data to check block types Darrick J. Wong
2025-02-13  4:24     ` Christoph Hellwig
2025-02-06 23:00   ` [PATCH 13/22] xfs_repair: find and mark the rtrefcountbt inode Darrick J. Wong
2025-02-13  4:25     ` Christoph Hellwig
2025-02-06 23:00   ` [PATCH 14/22] xfs_repair: compute refcount data for the realtime groups Darrick J. Wong
2025-02-13  4:25     ` Christoph Hellwig
2025-02-06 23:00   ` [PATCH 15/22] xfs_repair: check existing realtime refcountbt entries against observed refcounts Darrick J. Wong
2025-02-13  4:26     ` Christoph Hellwig
2025-02-06 23:00   ` [PATCH 16/22] xfs_repair: reject unwritten shared extents Darrick J. Wong
2025-02-13  4:26     ` Christoph Hellwig
2025-02-06 23:01   ` [PATCH 17/22] xfs_repair: rebuild the realtime refcount btree Darrick J. Wong
2025-02-13  4:27     ` Christoph Hellwig
2025-02-06 23:01   ` [PATCH 18/22] xfs_repair: allow realtime files to have the reflink flag set Darrick J. Wong
2025-02-13  4:27     ` Christoph Hellwig
2025-02-06 23:01   ` [PATCH 19/22] xfs_repair: validate CoW extent size hint on rtinherit directories Darrick J. Wong
2025-02-13  4:27     ` Christoph Hellwig
2025-02-06 23:01   ` [PATCH 20/22] xfs_logprint: report realtime CUIs Darrick J. Wong
2025-02-13  4:28     ` Christoph Hellwig
2025-02-06 23:02   ` [PATCH 21/22] mkfs: validate CoW extent size hint when rtinherit is set Darrick J. Wong
2025-02-13  4:28     ` Christoph Hellwig
2025-02-06 23:02   ` [PATCH 22/22] mkfs: enable reflink on the realtime device Darrick J. Wong
2025-02-13  4:28     ` Christoph Hellwig
2025-02-06 22:30 ` [PATCHSET 5/5] xfsprogs: dump fs directory trees Darrick J. Wong
2025-02-06 23:02   ` [PATCH 1/4] xfs_db: pass const pointers when we're not modifying them Darrick J. Wong
2025-02-13  4:29     ` Christoph Hellwig
2025-02-13 13:26     ` Andrey Albershteyn
2025-02-06 23:03   ` [PATCH 2/4] xfs_db: use an empty transaction to try to prevent livelocks in path_navigate Darrick J. Wong
2025-02-13  4:29     ` Christoph Hellwig
2025-02-13 13:26     ` Andrey Albershteyn
2025-02-06 23:03   ` [PATCH 3/4] xfs_db: make listdir more generally useful Darrick J. Wong
2025-02-13  4:30     ` Christoph Hellwig
2025-02-13 13:26     ` Andrey Albershteyn
2025-02-06 23:03   ` [PATCH 4/4] xfs_db: add command to copy directory trees out of filesystems Darrick J. Wong
2025-02-13 13:25     ` Andrey Albershteyn
2025-02-18  8:36     ` Christoph Hellwig
2025-02-18 15:54       ` Darrick J. Wong
2025-02-18 18:04         ` Darrick J. Wong
2025-02-18 19:49           ` Darrick J. Wong
2025-02-19 18:04       ` Eric Sandeen
2025-02-19 18:30         ` Darrick J. Wong
2025-02-20  6:20           ` Christoph Hellwig
2025-02-20  6:19         ` Christoph Hellwig
2025-02-18 19:58     ` [PATCH v1.1 " Darrick J. Wong
2025-02-19  5:27       ` Christoph Hellwig

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=20250220213600.GS21808@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=aalbersh@kernel.org \
    --cc=hch@lst.de \
    --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