This series adds fuse iomap support for buffered writes and dirty folio writeback. This is needed so that granular dirty tracking can be used in fuse when large folios are enabled so that if only a few bytes in a large folio are dirty, only a smaller portion is written out instead of the entire folio. In order to do so, a new iomap type, IOMAP_IN_MEM, is added that is more generic and does not depend on the block layer. The parts of iomap buffer io that depend on bios and CONFIG_BLOCK is moved to a separate file, buffered-io-bio.c, in order to allow filesystems that do not have CONFIG_BLOCK set to use IOMAP_IN_MEM buffered io. This series was run through fstests with large folios enabled and through some quick sanity checks on passthrough_hp with a) writing 1 GB in 1 MB chunks and then going back and dirtying a few bytes in each chunk and b) writing 50 MB in 1 MB chunks and going through dirtying the entire chunk for several runs. a) showed about a 40% speedup increase with iomap support added and b) showed roughly the same performance. This patchset does not enable large folios yet. That will be sent out in a separate future patchset. Thanks, Joanne Joanne Koong (8): iomap: move buffered io bio logic into separate file iomap: add IOMAP_IN_MEM iomap type iomap: add buffered write support for IOMAP_IN_MEM iomaps iomap: add writepages support for IOMAP_IN_MEM iomaps iomap: add iomap_writeback_dirty_folio() fuse: use iomap for buffered writes fuse: use iomap for writeback fuse: use iomap for folio laundering fs/fuse/Kconfig | 1 + fs/fuse/file.c | 304 ++++++++++++--------------- fs/iomap/Makefile | 5 +- fs/iomap/buffered-io-bio.c | 279 +++++++++++++++++++++++++ fs/iomap/buffered-io.c | 410 +++++++++---------------------------- fs/iomap/internal.h | 46 +++++ include/linux/iomap.h | 32 ++- 7 files changed, 586 insertions(+), 491 deletions(-) create mode 100644 fs/iomap/buffered-io-bio.c -- 2.47.1