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? */