Hi all, Here's a first pass prototype of dirty folio batch processing for zero range. The idea here is that the fs can avoid pagecache flushing or wonky ordering/racing issues by passing in a batch of dirty folios that might exist over unwritten mappings at lookup time. This is only lightly tested so far, but works well enough to demonstrate the idea. The biggest open question in my mind is how to better define the interface. For now I just stuffed the folio_batch in the struct iomap, but I don't really like it there due to confusion between iomap and srcmap and because it bloats the structure. I thought about using ->private along with a custom ->get_folio(), but I don't think that really fits the idea of a built-in mechanism. It might be more appropriate to attach to the iter, but that currently isn't accessible to ->iomap_begin(). I suppose we could define an iomap_to_iter() or some such helper that the fill helper could use to populate the batch, but maybe there are other thoughts/ideas? Brian Brian Foster (4): iomap: allow passing a folio into write begin path iomap: optional zero range dirty folio processing xfs: always trim mapping to requested range for zero range xfs: fill dirty folios on zero range of unwritten mappings fs/iomap/buffered-io.c | 93 ++++++++++++++++++++++++++++++++++++++---- fs/iomap/iter.c | 2 + fs/xfs/xfs_iomap.c | 28 ++++++++----- include/linux/iomap.h | 5 +++ 4 files changed, 109 insertions(+), 19 deletions(-) -- 2.47.0