On Tue, Jul 8, 2025 at 6:51 AM Christoph Hellwig <hch@xxxxxx> wrote: > > Hi all, > > this is an alternative approach to the writeback part of the > "fuse: use iomap for buffered writes + writeback" series from Joanne. > It doesn't try to make the code build without CONFIG_BLOCK yet. > > The big difference compared to Joanne's version is that I hope the > split between the generic and ioend/bio based writeback code is a bit > cleaner here. We have two methods that define the split between the > generic writeback code, and the implemementation of it, and all knowledge > of ioends and bios now sits below that layer. > > This version passes testing on xfs, and gets as far as mainline for > gfs2 (crashes in generic/361). > > Changes since v3: > - add a patch to drop unused includes > - drop the iomap_writepage_ctx renaming - we should do this separately and > including the variable names if desired > - add a comment about special casing of holes in iomap_writeback_range > - split the cleanups to iomap_read_folio_sync into a separate prep patch > - explain the IOMAP_HOLE check in xfs_iomap_valid > - explain the iomap_writeback_folio later folio unlock vs dropbehind > - some cargo culting for the #$W# RST formatting > - "improve" the documentation coverage a bit > > Changes since v2: > - rename iomap_writepage_ctx to iomap_writeback_ctx > - keep local map_blocks helpers in XFS > - allow buildinging the writeback and write code for !CONFIG_BLOCK > > Changes since v1: > - fix iomap reuse in block/zonefs/gfs2 > - catch too large return value from ->writeback_range > - mention the correct file name in a commit log > - add patches for folio laundering > - add patches for read/modify write in the generic write helpers > > Diffstat: > Documentation/filesystems/iomap/design.rst | 3 > Documentation/filesystems/iomap/operations.rst | 57 +- > block/fops.c | 37 + > fs/gfs2/aops.c | 8 > fs/gfs2/bmap.c | 48 +- > fs/gfs2/bmap.h | 1 > fs/gfs2/file.c | 3 > fs/iomap/Makefile | 6 > fs/iomap/buffered-io.c | 554 +++++++------------------ > fs/iomap/direct-io.c | 5 > fs/iomap/fiemap.c | 3 > fs/iomap/internal.h | 1 > fs/iomap/ioend.c | 220 +++++++++ > fs/iomap/iter.c | 1 > fs/iomap/seek.c | 4 > fs/iomap/swapfile.c | 3 > fs/iomap/trace.c | 1 > fs/iomap/trace.h | 4 > fs/xfs/xfs_aops.c | 212 +++++---- > fs/xfs/xfs_file.c | 6 > fs/xfs/xfs_iomap.c | 12 > fs/xfs/xfs_iomap.h | 1 > fs/xfs/xfs_reflink.c | 3 > fs/zonefs/file.c | 40 + > include/linux/iomap.h | 82 ++- > 25 files changed, 705 insertions(+), 610 deletions(-) Thanks Christoph for all your work on this. I'll pull this and put v4 of the fuse iomap changes on top of this. I'll send that out this week.