Linux EXT4 FS development
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: tytso@mit.edu
Cc: bernd@bsbernd.com, miklos@szeredi.hu, linux-ext4@vger.kernel.org,
	neal@gompa.dev, linux-fsdevel@vger.kernel.org,
	fuse-devel@lists.linux.dev, joannelkoong@gmail.com
Subject: [PATCH 18/19] fuse4fs: disable fs reclaim and write throttling
Date: Wed, 29 Apr 2026 07:57:19 -0700	[thread overview]
Message-ID: <177747214856.4107473.4498426418327534752.stgit@frogsfrogsfrogs> (raw)
In-Reply-To: <177747214459.4107473.9520724883867588970.stgit@frogsfrogsfrogs>

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

Ask the kernel if we can disable fs reclaim and write throttling.

Disabling fs reclaim prevents livelocks where the fuse server can
allocate memory, fault into the kernel, and then the allocation tries to
initiate writeback by calling back into the same fuse server.

Disabling BDI write throttling means that writeback won't be throttled
by metadata writes to the filesystem.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
 fuse4fs/fuse4fs.c |   36 ++++++++++++++++++++++++++++++++++--
 1 file changed, 34 insertions(+), 2 deletions(-)


diff --git a/fuse4fs/fuse4fs.c b/fuse4fs/fuse4fs.c
index 49708bdf7b655d..6ea2d30772ae5a 100644
--- a/fuse4fs/fuse4fs.c
+++ b/fuse4fs/fuse4fs.c
@@ -7969,6 +7969,19 @@ static void try_set_io_flusher(struct fuse4fs *ff)
 #endif
 }
 
+/* Undo try_set_io_flusher */
+static void try_clear_io_flusher(struct fuse4fs *ff)
+{
+#ifdef HAVE_PR_SET_IO_FLUSHER
+	/*
+	 * zero ret means it's already set, negative means we can't even
+	 * look at the value so don't bother clearing it
+	 */
+	if (prctl(PR_GET_IO_FLUSHER, 0, 0, 0, 0) > 0)
+		prctl(PR_SET_IO_FLUSHER, 0, 0, 0, 0);
+#endif
+}
+
 /* Try to adjust the OOM score so that we don't get killed */
 static void try_adjust_oom_score(struct fuse4fs *ff)
 {
@@ -8022,6 +8035,23 @@ static int fuse4fs_event_loop(struct fuse4fs *ff,
 			      struct fuse_loop_config *loop_config,
 			      const struct fuse_cmdline_opts *opts)
 {
+	bool clear_io_flusher = false;
+	int ret;
+
+	/*
+	 * Try to set ourselves up with fs reclaim disabled to prevent
+	 * recursive reclaim and throttling.  This must be done before starting
+	 * the worker threads so that they inherit the process flags.
+	 */
+	ret = fuse_lowlevel_disable_fsreclaim(ff->fuse, 1);
+	if (ret) {
+		err_printf(ff, "%s: %s.\n",
+ _("Could not register as FS flusher thread"),
+			   strerror(-ret));
+		try_set_io_flusher(ff);
+		clear_io_flusher = true;
+	}
+
 	/*
 	 * Since there's a Big Kernel Lock around all the libext2fs code, we
 	 * only need to start four threads -- one to decode a request, another
@@ -8032,7 +8062,10 @@ static int fuse4fs_event_loop(struct fuse4fs *ff,
 	fuse_loop_cfg_set_idle_threads(loop_config, opts->max_idle_threads);
 	fuse_loop_cfg_set_max_threads(loop_config, 4);
 
-	return fuse_session_loop_mt(ff->fuse, loop_config) == 0 ? 0 : 8;
+	ret = fuse_session_loop_mt(ff->fuse, loop_config) == 0 ? 0 : 8;
+	if (clear_io_flusher)
+		try_clear_io_flusher(ff);
+	return ret;
 }
 
 #ifdef HAVE_FUSE4FS_SERVICE
@@ -8251,7 +8284,6 @@ int main(int argc, char *argv[])
 		}
 	}
 
-	try_set_io_flusher(&fctx);
 	try_adjust_oom_score(&fctx);
 
 	/* Will we allow users to allocate every last block? */


  parent reply	other threads:[~2026-04-29 14:57 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-29 14:12 [PATCHBLIZZARD v8] fuse/libfuse/e2fsprogs: faster file IO for containerized ext4 servers Darrick J. Wong
2026-04-29 14:20 ` [PATCHSET v8 1/6] libext2fs: refactoring for fuse2fs iomap support Darrick J. Wong
2026-04-29 14:51   ` [PATCH 1/5] libext2fs: invalidate cached blocks when freeing them Darrick J. Wong
2026-04-29 14:51   ` [PATCH 2/5] libext2fs: only flush affected blocks in unix_write_byte Darrick J. Wong
2026-04-29 14:52   ` [PATCH 3/5] libext2fs: allow unix_write_byte when the write would be aligned Darrick J. Wong
2026-04-29 14:52   ` [PATCH 4/5] libext2fs: allow clients to ask to write full superblocks Darrick J. Wong
2026-04-29 14:52   ` [PATCH 5/5] libext2fs: allow callers to disallow I/O to file data blocks Darrick J. Wong
2026-04-29 14:20 ` [PATCHSET v8 2/6] fuse2fs: use fuse iomap data paths for better file I/O performance Darrick J. Wong
2026-04-29 14:52   ` [PATCH 01/19] fuse2fs: implement bare minimum iomap for file mapping reporting Darrick J. Wong
2026-04-29 14:53   ` [PATCH 02/19] fuse2fs: add iomap= mount option Darrick J. Wong
2026-04-29 14:53   ` [PATCH 03/19] fuse2fs: implement iomap configuration Darrick J. Wong
2026-04-29 14:53   ` [PATCH 04/19] fuse2fs: register block devices for use with iomap Darrick J. Wong
2026-04-29 14:53   ` [PATCH 05/19] fuse2fs: implement directio file reads Darrick J. Wong
2026-04-29 14:54   ` [PATCH 06/19] fuse2fs: add extent dump function for debugging Darrick J. Wong
2026-04-29 14:54   ` [PATCH 07/19] fuse2fs: implement direct write support Darrick J. Wong
2026-04-29 14:54   ` [PATCH 08/19] fuse2fs: turn on iomap for pagecache IO Darrick J. Wong
2026-04-29 14:54   ` [PATCH 09/19] fuse2fs: don't zero bytes in punch hole Darrick J. Wong
2026-04-29 14:55   ` [PATCH 10/19] fuse2fs: don't do file data block IO when iomap is enabled Darrick J. Wong
2026-04-29 14:55   ` [PATCH 11/19] fuse2fs: try to create loop device when ext4 device is a regular file Darrick J. Wong
2026-04-29 14:55   ` [PATCH 12/19] fuse2fs: enable file IO to inline data files Darrick J. Wong
2026-04-29 14:56   ` [PATCH 13/19] fuse2fs: set iomap-related inode flags Darrick J. Wong
2026-04-29 14:56   ` [PATCH 14/19] fuse2fs: configure block device block size Darrick J. Wong
2026-04-29 14:56   ` [PATCH 15/19] fuse4fs: separate invalidation Darrick J. Wong
2026-04-29 14:56   ` [PATCH 16/19] fuse2fs: implement statx Darrick J. Wong
2026-04-29 14:57   ` [PATCH 17/19] fuse2fs: enable atomic writes Darrick J. Wong
2026-04-29 14:57   ` Darrick J. Wong [this message]
2026-04-29 14:57   ` [PATCH 19/19] fuse2fs: implement freeze and shutdown requests Darrick J. Wong
2026-04-29 14:20 ` [PATCHSET v8 3/6] fuse4fs: adapt iomap for fuse services Darrick J. Wong
2026-04-29 14:57   ` [PATCH 1/3] fuse4fs: configure iomap when running as a service Darrick J. Wong
2026-04-29 14:58   ` [PATCH 2/3] fuse4fs: set iomap backing device blocksize Darrick J. Wong
2026-04-29 14:58   ` [PATCH 3/3] fuse4fs: ask for loop devices when opening via fuservicemount Darrick J. Wong
2026-04-29 14:21 ` [PATCHSET v8 4/6] fuse4fs: specify the root node id Darrick J. Wong
2026-04-29 14:58   ` [PATCH 1/1] fuse4fs: don't use inode number translation when possible Darrick J. Wong
2026-04-29 14:21 ` [PATCHSET v8 5/6] fuse2fs: handle timestamps and ACLs correctly when iomap is enabled Darrick J. Wong
2026-04-29 14:58   ` [PATCH 01/10] fuse2fs: add strictatime/lazytime mount options Darrick J. Wong
2026-04-29 14:59   ` [PATCH 02/10] fuse2fs: skip permission checking on utimens when iomap is enabled Darrick J. Wong
2026-04-29 14:59   ` [PATCH 03/10] fuse2fs: let the kernel tell us about acl/mode updates Darrick J. Wong
2026-04-29 14:59   ` [PATCH 04/10] fuse2fs: better debugging for file mode updates Darrick J. Wong
2026-04-29 14:59   ` [PATCH 05/10] fuse2fs: debug timestamp updates Darrick J. Wong
2026-04-29 15:00   ` [PATCH 06/10] fuse2fs: use coarse timestamps for iomap mode Darrick J. Wong
2026-04-29 15:00   ` [PATCH 07/10] fuse2fs: add tracing for retrieving timestamps Darrick J. Wong
2026-04-29 15:00   ` [PATCH 08/10] fuse2fs: enable syncfs Darrick J. Wong
2026-04-29 15:00   ` [PATCH 09/10] fuse2fs: set sync, immutable, and append at file load time Darrick J. Wong
2026-04-29 15:01   ` [PATCH 10/10] fuse4fs: increase attribute timeout in iomap mode Darrick J. Wong
2026-04-29 14:21 ` [PATCHSET v8 6/6] fuse2fs: cache iomap mappings for even better file IO performance Darrick J. Wong
2026-04-29 15:01   ` [PATCH 1/4] fuse2fs: enable caching of iomaps Darrick J. Wong
2026-04-29 15:01   ` [PATCH 2/4] fuse2fs: constrain iomap mapping cache size Darrick J. Wong
2026-04-29 15:02   ` [PATCH 3/4] fuse4fs: upsert first file mapping to kernel on open Darrick J. Wong
2026-04-29 15:02   ` [PATCH 4/4] fuse2fs: enable iomap Darrick J. Wong
  -- strict thread matches above, loose matches on Subject: below --
2026-02-23 23:04 [PATCHSET v7 1/8] fuse2fs: use fuse iomap data paths for better file I/O performance Darrick J. Wong
2026-02-23 23:40 ` [PATCH 18/19] fuse4fs: disable fs reclaim and write throttling 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=177747214856.4107473.4498426418327534752.stgit@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=bernd@bsbernd.com \
    --cc=fuse-devel@lists.linux.dev \
    --cc=joannelkoong@gmail.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=neal@gompa.dev \
    --cc=tytso@mit.edu \
    /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