This patchset adds support for large folios in fuse. This does not yet switch fuse to using large folios. Using large folios in fuse is dependent on adding granular dirty-page tracking. This will be done in a separate patchset that will have fuse use iomap [1]. There also needs to be a followup (also part of future work) for having dirty page balancing not tank performance for unprivileged servers where bdi limits lead to subpar throttling [1], before enabling large folios for fuse. [1] https://lore.kernel.org/linux-fsdevel/CAJnrk1a38pv3OgFZRfdTiDMXuPWuBgN8KY47XfOsYHj=N2wxAg@xxxxxxxxxxxxxx/#t Changelog: v5: https://lore.kernel.org/linux-fsdevel/20250426000828.3216220-1-joannelkoong@xxxxxxxxx/ v5 -> v6: * Add Bernd's reviewed-bys * Iniitalize err to 0 for refactoring fuse_fill_write_pages() (Dan and syzbot) * Add comment for readahead about size of large folio (Bernd) * Use WARN_ON for readahead size sanity-checking v4: https://lore.kernel.org/linux-fsdevel/20250123012448.2479372-1-joannelkoong@xxxxxxxxx/ v4 -> v5: * Now that temp pages are removed in FUSE, resubmit v3. v3: https://lore.kernel.org/linux-fsdevel/20241213221818.322371-1-joannelkoong@xxxxxxxxx/ v3 -> v4: * Add Jeff's reviewed-bys * Drop writeback large folios changes, drop turning large folios on. These will be part of a separate future patchset v2: https://lore.kernel.org/linux-fsdevel/20241125220537.3663725-1-joannelkoong@xxxxxxxxx/ v2 -> v3: * Fix direct io parsing to check each extracted page instead of assuming all pages in a large folio will be used (Matthew) v1: https://lore.kernel.org/linux-fsdevel/20241109001258.2216604-1-joannelkoong@xxxxxxxxx/ v1 -> v2: * Change naming from "non-writeback write" to "writethrough write" * Fix deadlock for writethrough writes by calling fault_in_iov_iter_readable() * first before __filemap_get_folio() (Josef) * For readahead, retain original folio_size() for descs.length (Josef) * Use folio_zero_range() api in fuse_copy_folio() (Josef) * Add Josef's reviewed-bys Joanne Koong (11): 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: optimize direct io large folios processing fuse: support large folios for writeback fs/fuse/dev.c | 126 ++++++++++++++++++----------------- fs/fuse/dir.c | 8 +-- fs/fuse/file.c | 153 +++++++++++++++++++++++++++++-------------- fs/fuse/fuse_dev_i.h | 2 +- 4 files changed, 172 insertions(+), 117 deletions(-) -- 2.47.1