]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
shmem: fix tmpfs reconfiguration (remount) when noswap is set
authorMike Yuan <me@yhndnzj.com>
Sat, 8 Nov 2025 19:09:47 +0000 (19:09 +0000)
committerChristian Brauner <brauner@kernel.org>
Wed, 12 Nov 2025 09:43:22 +0000 (10:43 +0100)
commit3cd1548a278c7d6a9bdef1f1866e7cf66bfd3518
tree67e2579ce3555e6ad5de53eafe049d7bc86d9005
parent78f0e33cd6c939a555aa80dbed2fec6b333a7660
shmem: fix tmpfs reconfiguration (remount) when noswap is set

In systemd we're trying to switch the internal credentials setup logic
to new mount API [1], and I noticed fsconfig(FSCONFIG_CMD_RECONFIGURE)
consistently fails on tmpfs with noswap option. This can be trivially
reproduced with the following:

```
int fs_fd = fsopen("tmpfs", 0);
fsconfig(fs_fd, FSCONFIG_SET_FLAG, "noswap", NULL, 0);
fsconfig(fs_fd, FSCONFIG_CMD_CREATE, NULL, NULL, 0);
fsmount(fs_fd, 0, 0);
fsconfig(fs_fd, FSCONFIG_CMD_RECONFIGURE, NULL, NULL, 0);  <------ EINVAL
```

After some digging the culprit is shmem_reconfigure() rejecting
!(ctx->seen & SHMEM_SEEN_NOSWAP) && sbinfo->noswap, which is bogus
as ctx->seen serves as a mask for whether certain options are touched
at all. On top of that, noswap option doesn't use fsparam_flag_no,
hence it's not really possible to "reenable" swap to begin with.
Drop the check and redundant SHMEM_SEEN_NOSWAP flag.

[1] https://github.com/systemd/systemd/pull/39637

Fixes: 2c6efe9cf2d7 ("shmem: add support to ignore swap")
Signed-off-by: Mike Yuan <me@yhndnzj.com>
Link: https://patch.msgid.link/20251108190930.440685-1-me@yhndnzj.com
Cc: Luis Chamberlain <mcgrof@kernel.org>
Cc: Christian Brauner <brauner@kernel.org>
Cc: Hugh Dickins <hughd@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
mm/shmem.c