|
|
Subscribe / Log in / New account

fuse: support large folios

From:  Joanne Koong <joannelkoong-AT-gmail.com>
To:  miklos-AT-szeredi.hu
Subject:  [PATCH v5 00/11] fuse: support large folios
Date:  Fri, 25 Apr 2025 17:08:17 -0700
Message-ID:  <20250426000828.3216220-1-joannelkoong@gmail.com>
Cc:  linux-fsdevel-AT-vger.kernel.org, jlayton-AT-kernel.org, jefflexu-AT-linux.alibaba.com, josef-AT-toxicpanda.com, bernd.schubert-AT-fastmail.fm, willy-AT-infradead.org, kernel-team-AT-meta.com
Archive-link:  Article

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.

This patchset (v5) is pretty much identical to v3 except for fixing up
readahead error handling.

[1] https://lore.kernel.org/linux-fsdevel/CAJnrk1a38pv3OgFZRf...

Changelog:
v4: https://lore.kernel.org/linux-fsdevel/20250123012448.2479...
v4 -> v5:
* Now that temp pages are removed in FUSE, resubmit v3.
 
v3: https://lore.kernel.org/linux-fsdevel/20241213221818.3223...
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.3663...
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.2216...
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       | 148 +++++++++++++++++++++++++++++--------------
 fs/fuse/fuse_dev_i.h |   2 +-
 4 files changed, 169 insertions(+), 115 deletions(-)

-- 
2.47.1




Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds