[GIT PULL] fuse update for 6.16

From: Miklos Szeredi
Date: Mon Jun 02 2025 - 09:19:41 EST


Hi Linus,

Please pull from:

git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git
tags/fuse-update-6.16

- Remove tmp page copying in writeback path (Joanne). This removes
~300 lines and with that a lot of complexity related to avoiding
reclaim related deadlock. The old mechanism is replaced with a
mapping flag that tells the MM not to block reclaim waiting for
writeback to complete. The MM parts have been reviewed/acked by
respective maintainers.

- Convert more code to handle large folios (Joanne). This still just
adds the code to deal with large folios and does not enable them yet.

- Allow invalidating all cached lookups atomically (Luis Henriques).
This feature is useful for CernVMFS, which currently does this
iteratively.

- Align write prefaulting in fuse with generic one (Dave Hansen)

- Fix race causing invalid data to be cached when setting attributes
on different nodes of a distributed fs (Guang Yuan Wu)

- Update documentation for passthrough (Chen Linxuan)

- Add fdinfo about the device number associated with an opened
/dev/fuse instance (Chen Linxuan)

- Increase readdir buffer size (Miklos). This depends on a patch to
VFS readdir code that was already merged through Christians tree.

- Optimize io-uring request expiration (Joanne)

- Misc cleanups

There's conflict with commit 74e6ee62a894 ("fuse: drop usage of
folio_index") the first hunk of which just gets evicted with the tmp
page cleanup and the second one needs to apply the trivial
folio_index(folio) -> folio->index conversion to my version.
Resolution attached.

Thanks,
Miklos
---

Chen Linxuan (3):
MAINTAINERS: update filter of FUSE documentation
docs: filesystems: add fuse-passthrough.rst
fs: fuse: add dev id to /dev/fuse fdinfo

Dave Hansen (1):
fuse: Move prefaulting out of hot write path

Guang Yuan Wu (1):
fuse: fix race between concurrent setattrs from multiple nodes

Jiale Yang (1):
fuse: change 'unsigned' to 'unsigned int'

Joanne Koong (15):
fuse: Convert 'write' to a bit-field in struct fuse_copy_state
fuse: use boolean bit-fields in struct fuse_copy_state
fuse: optimize over-io-uring request expiration check
mm: skip folio reclaim in legacy memcg contexts for deadlockable mappings
fuse: remove tmp folio for writebacks and internal rb tree
fuse: support copying large folios
fuse: support large folios for retrieves
fuse: refactor fuse_fill_write_pages()
fuse: support large folios for writethrough writes
fuse: support large folios for folio reads
fuse: support large folios for symlinks
fuse: support large folios for stores
fuse: support large folios for queued writes
fuse: support large folios for readahead
fuse: support large folios for writeback

Luis Henriques (1):
fuse: add more control over cache invalidation behaviour

Miklos Szeredi (3):
fuse: don't allow signals to interrupt getdents copying
readdir: supply dir_context.count as readdir buffer size hint
fuse: increase readdir buffer size

---
Documentation/filesystems/fuse-passthrough.rst | 133 +++++++
Documentation/filesystems/index.rst | 1 +
MAINTAINERS | 2 +-
fs/exportfs/expfs.c | 1 +
fs/fuse/dev.c | 182 ++++++----
fs/fuse/dev_uring.c | 34 +-
fs/fuse/dir.c | 46 ++-
fs/fuse/file.c | 474 ++++++-------------------
fs/fuse/fuse_dev_i.h | 9 +-
fs/fuse/fuse_i.h | 10 +-
fs/fuse/inode.c | 11 +-
fs/fuse/readdir.c | 40 +--
fs/overlayfs/readdir.c | 12 +-
fs/readdir.c | 47 ++-
include/linux/fs.h | 10 +
include/linux/pagemap.h | 11 +
include/uapi/linux/fuse.h | 6 +-
mm/vmscan.c | 12 +-
18 files changed, 519 insertions(+), 522 deletions(-)
create mode 100644 Documentation/filesystems/fuse-passthrough.rst
diff --cc fs/fuse/file.c
index 6f19a4daa559,3d0b33be3824..000000000000
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@@ -2349,7 -2118,7 +2118,7 @@@ static bool fuse_writepage_need_send(st
return true;

/* Discontinuity */
- if (data->orig_folios[ap->num_folios - 1]->index + 1 != folio->index)
- if (folio_next_index(ap->folios[ap->num_folios - 1]) != folio_index(folio))
++ if (folio_next_index(ap->folios[ap->num_folios - 1]) != folio->index
return true;

/* Need to grow the pages array? If so, did the expansion fail? */