[PATCH v2 00/16] fuse: use iomap for buffered reads + readahead

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This series adds fuse iomap support for buffered reads and readahead.
This is needed so that granular uptodate tracking can be used in fuse when
large folios are enabled so that only the non-uptodate portions of the folio
need to be read in instead of having to read in the entire folio. It also is
needed in order to turn on large folios for servers that use the writeback
cache since otherwise there is a race condition that may lead to data
corruption if there is a partial write, then a read and the read happens
before the write has undergone writeback, since otherwise the folio will not
be marked uptodate from the partial write so the read will read in the entire
folio from disk, which will overwrite the partial write.

This is on top of commit d02ae3528998 ("Merge branch 'kernel-6.18.clone3'
into vfs.all") in Christian's vfs tree.

This series was run through fstests on fuse passthrough_hp with an
out-of kernel patch enabling fuse large folios.

This patchset does not enable large folios on fuse yet. That will be part
of a different patchset.

Thanks,
Joanne

Changelog
---------
v1: https://lore.kernel.org/linux-fsdevel/20250829235627.4053234-1-joannelkoong@xxxxxxxxx/
v1 -> v2:
* Don't pass in caller-provided arg through iter->private, pass it through
  ctx->private instead (Darrick & Christoph)
* Separate 'bias' for ifs->read_bytes_pending into separate patch (Christoph)
* Rework read/readahead interface to take in struct iomap_read_folio_ctx
  (Christoph)
* Add patch for removing fuse fc->blkbits workaround, now that Miklos's tree
  has been merged into Christian's

Joanne Koong (16):
  iomap: move async bio read logic into helper function
  iomap: move read/readahead bio submission logic into helper function
  iomap: rename cur_folio_in_bio to folio_owned
  iomap: store read/readahead bio generically
  iomap: propagate iomap_read_folio() error to caller
  iomap: iterate over entire folio in iomap_readpage_iter()
  iomap: rename iomap_readpage_iter() to iomap_read_folio_iter()
  iomap: rename iomap_readpage_ctx struct to iomap_read_folio_ctx
  iomap: add public start/finish folio read helpers
  iomap: make iomap_read_folio_ctx->folio_owned internal
  iomap: add caller-provided callbacks for read and readahead
  iomap: add bias for async read requests
  iomap: move read/readahead logic out of CONFIG_BLOCK guard
  fuse: use iomap for read_folio
  fuse: use iomap for readahead
  fuse: remove fc->blkbits workaround for partial writes

 .../filesystems/iomap/operations.rst          |  42 +++
 block/fops.c                                  |  14 +-
 fs/erofs/data.c                               |  14 +-
 fs/fuse/dir.c                                 |   2 +-
 fs/fuse/file.c                                | 291 ++++++++++-------
 fs/fuse/fuse_i.h                              |   8 -
 fs/fuse/inode.c                               |  13 +-
 fs/gfs2/aops.c                                |  21 +-
 fs/iomap/buffered-io.c                        | 307 ++++++++++--------
 fs/xfs/xfs_aops.c                             |  14 +-
 fs/zonefs/file.c                              |  14 +-
 include/linux/iomap.h                         |  45 ++-
 12 files changed, 509 insertions(+), 276 deletions(-)

-- 
2.47.3





[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux