linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: hch@lst.de
Cc: linux-xfs@vger.kernel.org, cem@kernel.org
Subject: [PATCH v30.7.1 7/8] xfs_scrub: improve responsiveness while trimming the filesystem
Date: Tue, 2 Jul 2024 20:52:27 -0700	[thread overview]
Message-ID: <20240703035227.GX612460@frogsfrogsfrogs> (raw)
In-Reply-To: <171988118237.2007602.9576505614542313879.stgit@frogsfrogsfrogs>

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

On a 10TB filesystem where the free space in each AG is heavily
fragmented, I noticed some very high runtimes on a FITRIM call for the
entire filesystem.  xfs_scrub likes to report progress information on
each phase of the scrub, which means that a strace for the entire
filesystem:

ioctl(3, FITRIM, {start=0x0, len=10995116277760, minlen=0}) = 0 <686.209839>

shows that scrub is uncommunicative for the entire duration.  We can't
report any progress for the duration of the call, and the program is not
responsive to signals.  Reducing the size of the FITRIM requests to a
single AG at a time produces lower times for each individual call, but
even this isn't quite acceptable, because the time between progress
reports are still very high:

Strace for the first 4x 1TB AGs looks like (2):
ioctl(3, FITRIM, {start=0x0, len=1099511627776, minlen=0}) = 0 <68.352033>
ioctl(3, FITRIM, {start=0x10000000000, len=1099511627776, minlen=0}) = 0 <68.760323>
ioctl(3, FITRIM, {start=0x20000000000, len=1099511627776, minlen=0}) = 0 <67.235226>
ioctl(3, FITRIM, {start=0x30000000000, len=1099511627776, minlen=0}) = 0 <69.465744>

I then had the idea to limit the length parameter of each call to a
smallish amount (~11GB) so that we could report progress relatively
quickly, but much to my surprise, each FITRIM call still took ~68
seconds!

Unfortunately, the by-length fstrim implementation handles this poorly
because it walks the entire free space by length index (cntbt), which is
a very inefficient way to walk a subset of an AG when the free space is
fragmented.

To fix that, I created a second implementation in the kernel that will
walk the bnobt and perform the trims in block number order.  This
algorithm constrains the amount of btree scanning to something
resembling the range passed in, which reduces the amount of time it
takes to respond to a signal.

Therefore, break up the FITRIM calls so they don't scan more than 11GB
of space at a time.  Break the calls up by AG so that each call only has
to take one AGF per call, because each AG that we traverse causes a log
force.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
 scrub/phase8.c |  102 ++++++++++++++++++++++++++++++++++++++++++++++----------
 scrub/vfs.c    |   10 ++++-
 scrub/vfs.h    |    2 +
 3 files changed, 91 insertions(+), 23 deletions(-)

diff --git a/scrub/phase8.c b/scrub/phase8.c
index 75400c968595..e35bf11bf329 100644
--- a/scrub/phase8.c
+++ b/scrub/phase8.c
@@ -45,27 +45,90 @@ fstrim_ok(
 	return true;
 }
 
+/*
+ * Limit the amount of fstrim scanning that we let the kernel do in a single
+ * call so that we can implement decent progress reporting and CPU resource
+ * control.  Pick a prime number of gigabytes for interest.
+ */
+#define FSTRIM_MAX_BYTES	(11ULL << 30)
+
+/* Trim a certain range of the filesystem. */
+static int
+fstrim_fsblocks(
+	struct scrub_ctx	*ctx,
+	uint64_t		start_fsb,
+	uint64_t		fsbcount)
+{
+	uint64_t		start = cvt_off_fsb_to_b(&ctx->mnt, start_fsb);
+	uint64_t		len = cvt_off_fsb_to_b(&ctx->mnt, fsbcount);
+	int			error;
+
+	while (len > 0) {
+		uint64_t	run;
+
+		run = min(len, FSTRIM_MAX_BYTES);
+
+		error = fstrim(ctx, start, run);
+		if (error == EOPNOTSUPP) {
+			/* Pretend we finished all the work. */
+			progress_add(len);
+			return 0;
+		}
+		if (error) {
+			char		descr[DESCR_BUFSZ];
+
+			snprintf(descr, sizeof(descr) - 1,
+					_("fstrim start 0x%llx run 0x%llx"),
+					(unsigned long long)start,
+					(unsigned long long)run);
+			str_liberror(ctx, error, descr);
+			return error;
+		}
+
+		progress_add(run);
+		len -= run;
+		start += run;
+	}
+
+	return 0;
+}
+
+/* Trim each AG on the data device. */
+static int
+fstrim_datadev(
+	struct scrub_ctx	*ctx)
+{
+	struct xfs_fsop_geom	*geo = &ctx->mnt.fsgeom;
+	uint64_t		fsbno;
+	int			error;
+
+	for (fsbno = 0; fsbno < geo->datablocks; fsbno += geo->agblocks) {
+		uint64_t	fsbcount;
+
+		/*
+		 * Make sure that trim calls do not cross AG boundaries so that
+		 * the kernel only performs one log force (and takes one AGF
+		 * lock) per call.
+		 */
+		progress_add(geo->blocksize);
+		fsbcount = min(geo->datablocks - fsbno, geo->agblocks);
+		error = fstrim_fsblocks(ctx, fsbno, fsbcount);
+		if (error)
+			return error;
+	}
+
+	return 0;
+}
+
 /* Trim the filesystem, if desired. */
 int
 phase8_func(
 	struct scrub_ctx	*ctx)
 {
-	int			error;
-
 	if (!fstrim_ok(ctx))
 		return 0;
 
-	error = fstrim(ctx);
-	if (error == EOPNOTSUPP)
-		return 0;
-
-	if (error) {
-		str_liberror(ctx, error, _("fstrim"));
-		return error;
-	}
-
-	progress_add(1);
-	return 0;
+	return fstrim_datadev(ctx);
 }
 
 /* Estimate how much work we're going to do. */
@@ -76,12 +139,13 @@ phase8_estimate(
 	unsigned int		*nr_threads,
 	int			*rshift)
 {
-	*items = 0;
-
-	if (fstrim_ok(ctx))
-		*items = 1;
-
+	if (fstrim_ok(ctx)) {
+		*items = cvt_off_fsb_to_b(&ctx->mnt,
+				ctx->mnt.fsgeom.datablocks);
+	} else {
+		*items = 0;
+	}
 	*nr_threads = 1;
-	*rshift = 0;
+	*rshift = 30; /* GiB */
 	return 0;
 }
diff --git a/scrub/vfs.c b/scrub/vfs.c
index bcfd4f42ca8b..cc958ba9438e 100644
--- a/scrub/vfs.c
+++ b/scrub/vfs.c
@@ -298,11 +298,15 @@ struct fstrim_range {
 /* Call FITRIM to trim all the unused space in a filesystem. */
 int
 fstrim(
-	struct scrub_ctx	*ctx)
+	struct scrub_ctx	*ctx,
+	uint64_t		start,
+	uint64_t		len)
 {
-	struct fstrim_range	range = {0};
+	struct fstrim_range	range = {
+		.start		= start,
+		.len		= len,
+	};
 
-	range.len = ULLONG_MAX;
 	if (ioctl(ctx->mnt.fd, FITRIM, &range) == 0)
 		return 0;
 	if (errno == EOPNOTSUPP || errno == ENOTTY)
diff --git a/scrub/vfs.h b/scrub/vfs.h
index a8a4d72e290a..1af8d80d1de6 100644
--- a/scrub/vfs.h
+++ b/scrub/vfs.h
@@ -24,6 +24,6 @@ typedef int (*scan_fs_tree_dirent_fn)(struct scrub_ctx *, const char *,
 int scan_fs_tree(struct scrub_ctx *ctx, scan_fs_tree_dir_fn dir_fn,
 		scan_fs_tree_dirent_fn dirent_fn, void *arg);
 
-int fstrim(struct scrub_ctx *ctx);
+int fstrim(struct scrub_ctx *ctx, uint64_t start, uint64_t len);
 
 #endif /* XFS_SCRUB_VFS_H_ */

  parent reply	other threads:[~2024-07-03  3:52 UTC|newest]

Thread overview: 295+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-02  0:43 [PATCHBOMB] xfsprogs: program changes (mostly xfs_scrub) for 6.10 Darrick J. Wong
2024-07-02  0:49 ` [PATCHSET v30.7 01/16] xfsprogs: atomic file updates Darrick J. Wong
2024-07-02  0:53   ` [PATCH 01/12] man: document the exchange-range ioctl Darrick J. Wong
2024-07-02  5:08     ` Christoph Hellwig
2024-07-02  0:54   ` [PATCH 02/12] man: document XFS_FSOP_GEOM_FLAGS_EXCHRANGE Darrick J. Wong
2024-07-02  5:08     ` Christoph Hellwig
2024-07-02  0:54   ` [PATCH 03/12] libhandle: add support for bulkstat v5 Darrick J. Wong
2024-07-02  5:09     ` Christoph Hellwig
2024-07-02 19:48       ` Darrick J. Wong
2024-07-02  0:54   ` [PATCH 04/12] libfrog: add support for exchange range ioctl family Darrick J. Wong
2024-07-02  5:09     ` Christoph Hellwig
2024-07-02  0:54   ` [PATCH 05/12] xfs_db: advertise exchange-range in the version command Darrick J. Wong
2024-07-02  5:10     ` Christoph Hellwig
2024-07-02  0:55   ` [PATCH 06/12] xfs_logprint: support dumping exchmaps log items Darrick J. Wong
2024-07-02  5:11     ` Christoph Hellwig
2024-07-02 19:49       ` Darrick J. Wong
2024-07-02  0:55   ` [PATCH 07/12] xfs_fsr: convert to bulkstat v5 ioctls Darrick J. Wong
2024-07-02  5:13     ` Christoph Hellwig
2024-07-02 19:51       ` Darrick J. Wong
2024-07-02  0:55   ` [PATCH 08/12] xfs_fsr: skip the xattr/forkoff levering with the newer swapext implementations Darrick J. Wong
2024-07-02  5:14     ` Christoph Hellwig
2024-07-02  0:55   ` [PATCH 09/12] xfs_io: create exchangerange command to test file range exchange ioctl Darrick J. Wong
2024-07-02  5:15     ` Christoph Hellwig
2024-07-02 19:53       ` Darrick J. Wong
2024-07-02  0:56   ` [PATCH 10/12] libfrog: advertise exchange-range support Darrick J. Wong
2024-07-02  5:15     ` Christoph Hellwig
2024-07-02  0:56   ` [PATCH 11/12] xfs_repair: add exchange-range to file systems Darrick J. Wong
2024-07-02  5:15     ` Christoph Hellwig
2024-07-02  0:56   ` [PATCH 12/12] mkfs: add a formatting option for exchange-range Darrick J. Wong
2024-07-02  5:16     ` Christoph Hellwig
2024-07-02  0:49 ` [PATCHSET v30.7 02/16] xfsprogs: inode-related repair fixes Darrick J. Wong
2024-07-02  0:56   ` [PATCH 1/3] xfs_{db,repair}: add an explicit owner field to xfs_da_args Darrick J. Wong
2024-07-02  5:16     ` Christoph Hellwig
2024-07-02  0:57   ` [PATCH 2/3] libxfs: port the bumplink function from the kernel Darrick J. Wong
2024-07-02  5:16     ` Christoph Hellwig
2024-07-02  0:57   ` [PATCH 3/3] mkfs/repair: pin inodes that would otherwise overflow link count Darrick J. Wong
2024-07-02  5:17     ` Christoph Hellwig
2024-07-02  0:50 ` [PATCHSET v30.7 03/16] xfs_scrub: detect deceptive filename extensions Darrick J. Wong
2024-07-02  0:57   ` [PATCH 01/13] xfs_scrub: use proper UChar string iterators Darrick J. Wong
2024-07-02  5:18     ` Christoph Hellwig
2024-07-02  0:57   ` [PATCH 02/13] xfs_scrub: hoist code that removes ignorable characters Darrick J. Wong
2024-07-02  5:21     ` Christoph Hellwig
2024-07-02  0:58   ` [PATCH 03/13] xfs_scrub: add a couple of omitted invisible code points Darrick J. Wong
2024-07-02  5:22     ` Christoph Hellwig
2024-07-03  1:59       ` Darrick J. Wong
2024-07-03  4:27         ` Christoph Hellwig
2024-07-03  5:02           ` Darrick J. Wong
2024-07-03 18:35             ` Darrick J. Wong
2024-07-04  7:22               ` Christoph Hellwig
2024-07-02  0:58   ` [PATCH 04/13] xfs_scrub: avoid potential UAF after freeing a duplicate name entry Darrick J. Wong
2024-07-02  5:22     ` Christoph Hellwig
2024-07-02  0:58   ` [PATCH 05/13] xfs_scrub: guard against libicu returning negative buffer lengths Darrick J. Wong
2024-07-02  5:22     ` Christoph Hellwig
2024-07-02  0:58   ` [PATCH 06/13] xfs_scrub: hoist non-rendering character predicate Darrick J. Wong
2024-07-02  5:23     ` Christoph Hellwig
2024-07-02  0:59   ` [PATCH 07/13] xfs_scrub: store bad flags with the name entry Darrick J. Wong
2024-07-02  5:23     ` Christoph Hellwig
2024-07-02  0:59   ` [PATCH 08/13] xfs_scrub: rename UNICRASH_ZERO_WIDTH to UNICRASH_INVISIBLE Darrick J. Wong
2024-07-02  5:23     ` Christoph Hellwig
2024-07-02  0:59   ` [PATCH 09/13] xfs_scrub: type-coerce the UNICRASH_* flags Darrick J. Wong
2024-07-02  5:24     ` Christoph Hellwig
2024-07-02  0:59   ` [PATCH 10/13] xfs_scrub: reduce size of struct name_entry Darrick J. Wong
2024-07-02  5:24     ` Christoph Hellwig
2024-07-02  1:00   ` [PATCH 11/13] xfs_scrub: rename struct unicrash.normalizer Darrick J. Wong
2024-07-02  5:24     ` Christoph Hellwig
2024-07-02  1:00   ` [PATCH 12/13] xfs_scrub: report deceptive file extensions Darrick J. Wong
2024-07-02  5:25     ` Christoph Hellwig
2024-07-02  1:00   ` [PATCH 13/13] xfs_scrub: dump unicode points Darrick J. Wong
2024-07-02  5:25     ` Christoph Hellwig
2024-07-02  0:50 ` [PATCHSET v30.7 04/16] xfs_scrub: move fstrim to a separate phase Darrick J. Wong
2024-07-02  1:01   ` [PATCH 1/8] xfs_scrub: move FITRIM to phase 8 Darrick J. Wong
2024-07-02  5:27     ` Christoph Hellwig
2024-07-02  1:01   ` [PATCH 2/8] xfs_scrub: ignore phase 8 if the user disabled fstrim Darrick J. Wong
2024-07-02  5:27     ` Christoph Hellwig
2024-07-02  1:01   ` [PATCH 3/8] xfs_scrub: collapse trim_filesystem Darrick J. Wong
2024-07-02  5:27     ` Christoph Hellwig
2024-07-02  1:01   ` [PATCH 4/8] xfs_scrub: fix the work estimation for phase 8 Darrick J. Wong
2024-07-02  5:27     ` Christoph Hellwig
2024-07-02  1:02   ` [PATCH 5/8] xfs_scrub: report FITRIM errors properly Darrick J. Wong
2024-07-02  5:28     ` Christoph Hellwig
2024-07-02  1:02   ` [PATCH 6/8] xfs_scrub: don't call FITRIM after runtime errors Darrick J. Wong
2024-07-02  5:28     ` Christoph Hellwig
2024-07-02  1:02   ` [PATCH 7/8] xfs_scrub: don't trim the first agbno of each AG for better performance Darrick J. Wong
2024-07-02  5:30     ` Christoph Hellwig
2024-07-03  3:45       ` Darrick J. Wong
2024-07-03  3:52     ` Darrick J. Wong [this message]
2024-07-03  4:33       ` [PATCH v30.7.1 7/8] xfs_scrub: improve responsiveness while trimming the filesystem Christoph Hellwig
2024-07-03  4:50         ` Darrick J. Wong
2024-07-02  1:02   ` [PATCH 8/8] xfs_scrub: improve progress meter for phase 8 fstrimming Darrick J. Wong
2024-07-02  0:50 ` [PATCHSET v30.7 05/16] xfs_scrub: use free space histograms to reduce fstrim runtime Darrick J. Wong
2024-07-02  1:03   ` [PATCH 1/7] libfrog: hoist free space histogram code Darrick J. Wong
2024-07-02  5:32     ` Christoph Hellwig
2024-07-03  2:47       ` Darrick J. Wong
2024-07-03  4:30         ` Christoph Hellwig
2024-07-03  4:55           ` Darrick J. Wong
2024-07-02  1:03   ` [PATCH 2/7] libfrog: print wider columns for free space histogram Darrick J. Wong
2024-07-02  5:33     ` Christoph Hellwig
2024-07-02  1:03   ` [PATCH 3/7] libfrog: print cdf of free space buckets Darrick J. Wong
2024-07-02  5:33     ` Christoph Hellwig
2024-07-02  1:03   ` [PATCH 4/7] xfs_scrub: don't close stdout when closing the progress bar Darrick J. Wong
2024-07-02  5:33     ` Christoph Hellwig
2024-07-02  1:04   ` [PATCH 5/7] xfs_scrub: remove pointless spacemap.c arguments Darrick J. Wong
2024-07-02  5:33     ` Christoph Hellwig
2024-07-02  1:04   ` [PATCH 6/7] xfs_scrub: collect free space histograms during phase 7 Darrick J. Wong
2024-07-02  5:34     ` Christoph Hellwig
2024-07-02  1:04   ` [PATCH 7/7] xfs_scrub: tune fstrim minlen parameter based on free space histograms Darrick J. Wong
2024-07-02  5:36     ` Christoph Hellwig
2024-07-03  2:29       ` Darrick J. Wong
2024-07-03  4:29         ` Christoph Hellwig
2024-07-03  4:55           ` Darrick J. Wong
2024-07-03  4:58             ` Christoph Hellwig
2024-07-03  5:04               ` Darrick J. Wong
2024-07-03  5:11                 ` Christoph Hellwig
2024-07-03  5:17                   ` Darrick J. Wong
2024-07-02  0:50 ` [PATCHSET v30.7 06/16] xfs_scrub: tighten security of systemd services Darrick J. Wong
2024-07-02  1:04   ` [PATCH 1/6] xfs_scrub: allow auxiliary pathnames for sandboxing Darrick J. Wong
2024-07-02  5:37     ` Christoph Hellwig
2024-07-02  1:05   ` [PATCH 2/6] xfs_scrub.service: reduce background CPU usage to less than one core if possible Darrick J. Wong
2024-07-02  1:05   ` [PATCH 3/6] xfs_scrub: use dynamic users when running as a systemd service Darrick J. Wong
2024-07-02  1:05   ` [PATCH 4/6] xfs_scrub: tighten up the security on the background " Darrick J. Wong
2024-07-02  1:06   ` [PATCH 5/6] xfs_scrub_fail: " Darrick J. Wong
2024-07-02  5:37     ` Christoph Hellwig
2024-07-02  1:06   ` [PATCH 6/6] xfs_scrub_all: " Darrick J. Wong
2024-07-02  5:37     ` Christoph Hellwig
2024-07-02  0:51 ` [PATCHSET v30.7 07/16] xfs_scrub_all: automatic media scan service Darrick J. Wong
2024-07-02  1:06   ` [PATCH 1/6] xfs_scrub_all: only use the xfs_scrub@ systemd services in service mode Darrick J. Wong
2024-07-02  5:38     ` Christoph Hellwig
2024-07-02  1:06   ` [PATCH 2/6] xfs_scrub_all: remove journalctl background process Darrick J. Wong
2024-07-02  5:38     ` Christoph Hellwig
2024-07-02  1:07   ` [PATCH 3/6] xfs_scrub_all: support metadata+media scans of all filesystems Darrick J. Wong
2024-07-02  5:39     ` Christoph Hellwig
2024-07-02  1:07   ` [PATCH 4/6] xfs_scrub_all: enable periodic file data scrubs automatically Darrick J. Wong
2024-07-02  5:39     ` Christoph Hellwig
2024-07-02  1:07   ` [PATCH 5/6] xfs_scrub_all: trigger automatic media scans once per month Darrick J. Wong
2024-07-02  5:39     ` Christoph Hellwig
2024-07-02  1:07   ` [PATCH 6/6] xfs_scrub_all: failure reporting for the xfs_scrub_all job Darrick J. Wong
2024-07-02  5:39     ` Christoph Hellwig
2024-07-02  0:51 ` [PATCHSET v30.7 08/16] xfs_scrub_all: improve systemd handling Darrick J. Wong
2024-07-02  1:08   ` [PATCH 1/5] xfs_scrub_all: encapsulate all the subprocess code in an object Darrick J. Wong
2024-07-02  5:40     ` Christoph Hellwig
2024-07-02  1:08   ` [PATCH 2/5] xfs_scrub_all: encapsulate all the systemctl " Darrick J. Wong
2024-07-02  5:41     ` Christoph Hellwig
2024-07-02  1:08   ` [PATCH 3/5] xfs_scrub_all: add CLI option for easier debugging Darrick J. Wong
2024-07-02  5:42     ` Christoph Hellwig
2024-07-02  1:08   ` [PATCH 4/5] xfs_scrub_all: convert systemctl calls to dbus Darrick J. Wong
2024-07-02  5:42     ` Christoph Hellwig
2024-07-02  1:09   ` [PATCH 5/5] xfs_scrub_all: implement retry and backoff for dbus calls Darrick J. Wong
2024-07-02  5:42     ` Christoph Hellwig
2024-07-02  0:51 ` [PATCHSET v30.7 09/16] xfs_scrub: automatic optimization by default Darrick J. Wong
2024-07-02  1:09   ` [PATCH 1/3] xfs_scrub: automatic downgrades to dry-run mode in service mode Darrick J. Wong
2024-07-02  5:43     ` Christoph Hellwig
2024-07-02  1:09   ` [PATCH 2/3] xfs_scrub: add an optimization-only mode Darrick J. Wong
2024-07-02  5:43     ` Christoph Hellwig
2024-07-02  1:09   ` [PATCH 3/3] debian: enable xfs_scrub_all systemd timer services by default Darrick J. Wong
2024-07-02  5:44     ` Christoph Hellwig
2024-07-03  2:59       ` Darrick J. Wong
2024-07-03  4:31         ` Christoph Hellwig
2024-07-03  5:01           ` Darrick J. Wong
2024-07-09 22:53             ` Darrick J. Wong
2024-07-10  6:18               ` Christoph Hellwig
2024-07-16 16:46                 ` Darrick J. Wong
2024-07-17  4:59                   ` Christoph Hellwig
2024-07-17 16:15                     ` Darrick J. Wong
2024-07-17 16:45                       ` Christoph Hellwig
2024-07-22  4:12                         ` Darrick J. Wong
2024-07-22 12:34                           ` Christoph Hellwig
2024-07-23 23:29                             ` Darrick J. Wong
2024-07-24 13:18                               ` Christoph Hellwig
2024-07-16 16:47                 ` [RFC PATCH 1/2] misc: shift install targets Darrick J. Wong
2024-07-16 16:49                   ` [RFC PATCH 2/2] debian: create a new package for automatic self-healing Darrick J. Wong
2024-07-17  5:00                   ` [RFC PATCH 1/2] misc: shift install targets Christoph Hellwig
2024-07-17 16:19                     ` Darrick J. Wong
2024-07-17 16:43                       ` Christoph Hellwig
2024-07-02  0:51 ` [PATCHSET v13.7 10/16] xfsprogs: improve extended attribute validation Darrick J. Wong
2024-07-02  1:10   ` [PATCH 1/3] xfs_repair: check free space requirements before allowing upgrades Darrick J. Wong
2024-07-02  5:44     ` Christoph Hellwig
2024-07-02  1:10   ` [PATCH 2/3] xfs_repair: enforce one namespace bit per extended attribute Darrick J. Wong
2024-07-02  5:44     ` Christoph Hellwig
2024-07-02  1:10   ` [PATCH 3/3] xfs_repair: check for unknown flags in attr entries Darrick J. Wong
2024-07-02  5:45     ` Christoph Hellwig
2024-07-02  0:52 ` [PATCHSET v13.7 11/16] xfsprogs: Parent Pointers Darrick J. Wong
2024-07-02  1:10   ` [PATCH 01/24] libxfs: create attr log item opcodes and formats for parent pointers Darrick J. Wong
2024-07-02  6:24     ` Christoph Hellwig
2024-07-02  1:11   ` [PATCH 02/24] xfs_{db,repair}: implement new attr hash value function Darrick J. Wong
2024-07-02  6:24     ` Christoph Hellwig
2024-07-02  1:11   ` [PATCH 03/24] xfs_logprint: dump new attr log item fields Darrick J. Wong
2024-07-02  6:25     ` Christoph Hellwig
2024-07-02 20:02       ` Darrick J. Wong
2024-07-02  1:11   ` [PATCH 04/24] man: document the XFS_IOC_GETPARENTS ioctl Darrick J. Wong
2024-07-02  6:25     ` Christoph Hellwig
2024-07-02  1:11   ` [PATCH 05/24] libfrog: report parent pointers to userspace Darrick J. Wong
2024-07-02  6:25     ` Christoph Hellwig
2024-07-02  1:12   ` [PATCH 06/24] libfrog: add parent pointer support code Darrick J. Wong
2024-07-02  6:26     ` Christoph Hellwig
2024-07-02  1:12   ` [PATCH 07/24] xfs_io: adapt parent command to new parent pointer ioctls Darrick J. Wong
2024-07-02  6:26     ` Christoph Hellwig
2024-07-02  1:12   ` [PATCH 08/24] xfs_io: Add i, n and f flags to parent command Darrick J. Wong
2024-07-02  6:26     ` Christoph Hellwig
2024-07-02  1:13   ` [PATCH 09/24] xfs_logprint: decode parent pointers in ATTRI items fully Darrick J. Wong
2024-07-02  6:27     ` Christoph Hellwig
2024-07-02  1:13   ` [PATCH 10/24] xfs_spaceman: report file paths Darrick J. Wong
2024-07-02  6:27     ` Christoph Hellwig
2024-07-02  1:13   ` [PATCH 11/24] xfs_scrub: use parent pointers when possible to report file operations Darrick J. Wong
2024-07-02  6:27     ` Christoph Hellwig
2024-07-02  1:13   ` [PATCH 12/24] xfs_scrub: use parent pointers to report lost file data Darrick J. Wong
2024-07-02  6:28     ` Christoph Hellwig
2024-07-02  1:14   ` [PATCH 13/24] xfs_db: report parent pointers in version command Darrick J. Wong
2024-07-02  6:28     ` Christoph Hellwig
2024-07-02  1:14   ` [PATCH 14/24] xfs_db: report parent bit on xattrs Darrick J. Wong
2024-07-02  6:28     ` Christoph Hellwig
2024-07-02  1:14   ` [PATCH 15/24] xfs_db: report parent pointers embedded in xattrs Darrick J. Wong
2024-07-02  6:28     ` Christoph Hellwig
2024-07-02  1:14   ` [PATCH 16/24] xfs_db: obfuscate dirent and parent pointer names consistently Darrick J. Wong
2024-07-02  6:33     ` Christoph Hellwig
2024-07-02  1:15   ` [PATCH 17/24] libxfs: export attr3_leaf_hdr_from_disk via libxfs_api_defs.h Darrick J. Wong
2024-07-02  6:35     ` Christoph Hellwig
2024-07-02  1:15   ` [PATCH 18/24] xfs_db: add a parents command to list the parents of a file Darrick J. Wong
2024-07-02  6:35     ` Christoph Hellwig
2024-07-02  1:15   ` [PATCH 19/24] xfs_db: make attr_set and attr_remove handle parent pointers Darrick J. Wong
2024-07-02  6:36     ` Christoph Hellwig
2024-07-02  1:15   ` [PATCH 20/24] xfs_db: add link and unlink expert commands Darrick J. Wong
2024-07-02  6:36     ` Christoph Hellwig
2024-07-02  1:16   ` [PATCH 21/24] xfs_db: compute hashes of parent pointers Darrick J. Wong
2024-07-02  6:37     ` Christoph Hellwig
2024-07-02  1:16   ` [PATCH 22/24] libxfs: create new files with attr forks if necessary Darrick J. Wong
2024-07-02  6:37     ` Christoph Hellwig
2024-07-02  1:16   ` [PATCH 23/24] mkfs: Add parent pointers during protofile creation Darrick J. Wong
2024-07-02  6:37     ` Christoph Hellwig
2024-07-02  1:16   ` [PATCH 24/24] mkfs: enable formatting with parent pointers Darrick J. Wong
2024-07-02  6:38     ` Christoph Hellwig
2024-07-02  0:52 ` [PATCHSET v13.7 12/16] xfsprogs: scrubbing for " Darrick J. Wong
2024-07-02  1:17   ` [PATCH 1/2] xfs: create a blob array data structure Darrick J. Wong
2024-07-02  6:41     ` Christoph Hellwig
2024-07-02  1:17   ` [PATCH 2/2] man2: update ioctl_xfs_scrub_metadata.2 for parent pointers Darrick J. Wong
2024-07-02  6:41     ` Christoph Hellwig
2024-07-02  0:52 ` [PATCHSET v13.7 13/16] xfsprogs: offline repair " Darrick J. Wong
2024-07-02  1:17   ` [PATCH 01/12] xfs_db: remove some boilerplate from xfs_attr_set Darrick J. Wong
2024-07-02  6:41     ` Christoph Hellwig
2024-07-02  1:17   ` [PATCH 02/12] xfs_db: actually report errors from libxfs_attr_set Darrick J. Wong
2024-07-02  6:41     ` Christoph Hellwig
2024-07-02  1:18   ` [PATCH 03/12] xfs_repair: junk parent pointer attributes when filesystem doesn't support them Darrick J. Wong
2024-07-02  6:42     ` Christoph Hellwig
2024-07-02  1:18   ` [PATCH 04/12] xfs_repair: add parent pointers when messing with /lost+found Darrick J. Wong
2024-07-02  6:42     ` Christoph Hellwig
2024-07-02  1:18   ` [PATCH 05/12] xfs_repair: junk duplicate hashtab entries when processing sf dirents Darrick J. Wong
2024-07-02  6:43     ` Christoph Hellwig
2024-07-02  1:19   ` [PATCH 06/12] xfs_repair: build a parent pointer index Darrick J. Wong
2024-07-02  6:45     ` Christoph Hellwig
2024-07-02  1:19   ` [PATCH 07/12] xfs_repair: move the global dirent name store to a separate object Darrick J. Wong
2024-07-02  6:45     ` Christoph Hellwig
2024-07-02  1:19   ` [PATCH 08/12] xfs_repair: deduplicate strings stored in string blob Darrick J. Wong
2024-07-02  6:46     ` Christoph Hellwig
2024-07-02  1:19   ` [PATCH 09/12] xfs_repair: check parent pointers Darrick J. Wong
2024-07-02  6:47     ` Christoph Hellwig
2024-07-02  1:20   ` [PATCH 10/12] xfs_repair: dump garbage parent pointer attributes Darrick J. Wong
2024-07-02  6:47     ` Christoph Hellwig
2024-07-02  1:20   ` [PATCH 11/12] xfs_repair: update ondisk parent pointer records Darrick J. Wong
2024-07-02  6:47     ` Christoph Hellwig
2024-07-02  1:20   ` [PATCH 12/12] xfs_repair: wipe ondisk parent pointers when there are none Darrick J. Wong
2024-07-02  6:47     ` Christoph Hellwig
2024-07-02  0:52 ` [PATCHSET v13.7 14/16] xfsprogs: detect and correct directory tree problems Darrick J. Wong
2024-07-02  1:20   ` [PATCH 1/5] libfrog: add directory tree structure scrubber to scrub library Darrick J. Wong
2024-07-02  6:48     ` Christoph Hellwig
2024-07-02  1:21   ` [PATCH 2/5] xfs_spaceman: report directory tree corruption in the health information Darrick J. Wong
2024-07-02  6:48     ` Christoph Hellwig
2024-07-02  1:21   ` [PATCH 3/5] xfs_scrub: fix erroring out of check_inode_names Darrick J. Wong
2024-07-02  6:48     ` Christoph Hellwig
2024-07-02  1:21   ` [PATCH 4/5] xfs_scrub: detect and repair directory tree corruptions Darrick J. Wong
2024-07-02  6:49     ` Christoph Hellwig
2024-07-02  1:21   ` [PATCH 5/5] xfs_scrub: defer phase5 file scans if dirloop fails Darrick J. Wong
2024-07-02  6:49     ` Christoph Hellwig
2024-07-02  0:53 ` [PATCHSET v30.7 15/16] xfs_scrub: vectorize kernel calls Darrick J. Wong
2024-07-02  1:22   ` [PATCH 01/10] man: document vectored scrub mode Darrick J. Wong
2024-07-02  6:56     ` Christoph Hellwig
2024-07-02  1:22   ` [PATCH 02/10] libfrog: support vectored scrub Darrick J. Wong
2024-07-02  6:56     ` Christoph Hellwig
2024-07-02  1:22   ` [PATCH 03/10] xfs_io: " Darrick J. Wong
2024-07-02  6:57     ` Christoph Hellwig
2024-07-02  1:22   ` [PATCH 04/10] xfs_scrub: split the scrub epilogue code into a separate function Darrick J. Wong
2024-07-02  6:57     ` Christoph Hellwig
2024-07-02  1:23   ` [PATCH 05/10] xfs_scrub: split the repair " Darrick J. Wong
2024-07-02  6:57     ` Christoph Hellwig
2024-07-02  1:23   ` [PATCH 06/10] xfs_scrub: convert scrub and repair epilogues to use xfs_scrub_vec Darrick J. Wong
2024-07-02  6:57     ` Christoph Hellwig
2024-07-02  1:23   ` [PATCH 07/10] xfs_scrub: vectorize scrub calls Darrick J. Wong
2024-07-02  6:58     ` Christoph Hellwig
2024-07-02  1:23   ` [PATCH 08/10] xfs_scrub: vectorize repair calls Darrick J. Wong
2024-07-02  6:58     ` Christoph Hellwig
2024-07-02  1:24   ` [PATCH 09/10] xfs_scrub: use scrub barriers to reduce kernel calls Darrick J. Wong
2024-07-02  6:58     ` Christoph Hellwig
2024-07-02  1:24   ` [PATCH 10/10] xfs_scrub: try spot repairs of metadata items to make scrub progress Darrick J. Wong
2024-07-02  6:59     ` Christoph Hellwig
2024-07-02  0:53 ` [PATCHSET v30.7 16/16] xfs_repair: small remote symlinks are ok Darrick J. Wong
2024-07-02  1:24   ` [PATCH 1/1] xfs_repair: allow symlinks with short remote targets Darrick J. Wong
2024-07-02  6:59     ` 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=20240703035227.GX612460@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=cem@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;
as well as URLs for NNTP newsgroup(s).