[PATCH 3/3] fuse2fs: adjust OOM killer score if possible

Darrick J. Wong
2025-11-06T22:40:08Z

Users don't like it when their filesystems go down unexpectedly. Set
the OOM score adjustment to -500 to try to prevent this, particularly
because fuse2fs doesn't support journal transactions.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
misc/fuse2fs.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c
index 86e0222a51369a..d6be5e9968567c 100644
--- a/misc/fuse2fs.c
+++ b/misc/fuse2fs.c
@@ -242,6 +242,7 @@ struct fuse2fs {

int logfd;
int blocklog;
+ int oom_score_adj;
unsigned int blockmask;
unsigned long offset;
unsigned int next_generation;
@@ -5298,6 +5299,7 @@ static struct fuse_opt fuse2fs_opts[] = {
FUSE2FS_OPT("norecovery", norecovery, 1),
FUSE2FS_OPT("noload", norecovery, 1),
FUSE2FS_OPT("offset=%lu", offset, 0),
+ FUSE2FS_OPT("oom_score_adj=%d", oom_score_adj, -500),
FUSE2FS_OPT("kernel", kernel, 1),
FUSE2FS_OPT("directio", directio, 1),
FUSE2FS_OPT("acl", acl, 1),
@@ -5508,19 +5510,31 @@ static void try_set_io_flusher(struct fuse2fs *ff)
#endif
}

+/* Try to adjust the OOM score so that we don't get killed */
+static void try_adjust_oom_score(struct fuse2fs *ff)
+{
+ FILE *fp = fopen("/proc/self/oom_score_adj", "w+");
+
+ if (!fp)
+ return;
+
+ fprintf(fp, "%d\n", ff->oom_score_adj);
+ fclose(fp);
+}
+
int main(int argc, char *argv[])
{
struct fuse_args args = FUSE_ARGS_INIT(argc, argv);
- struct fuse2fs fctx;
+ struct fuse2fs fctx = {
+ .magic = FUSE2FS_MAGIC,
+ .logfd = -1,
+ .bfl = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER,
+ .oom_score_adj = -500,
+ };
errcode_t err;
FILE *orig_stderr = stderr;
int ret;

- memset(&fctx, 0, sizeof(fctx));
- fctx.magic = FUSE2FS_MAGIC;
- fctx.logfd = -1;
- fctx.bfl = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;
-
ret = fuse_opt_parse(&args, &fctx, fuse2fs_opts, fuse2fs_opt_proc);
if (ret)
exit(1);
@@ -5554,6 +5568,7 @@ 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? */
if (getenv("FUSE2FS_ALLOC_ALL_BLOCKS")) {