Hi Linus, Please pull this branch with changes for iomap for 6.6-rc1. We've got some big changes for this release -- I'm very happy to be landing willy's work to enable large folios for the page cache for general read and write IOs when the fs can make contiguous space allocations, and Ritesh's work to track sub-folio dirty state to eliminate the write amplification problems inherent in using large folios. As a bonus, io_uring can now process write completions in the caller's context instead of bouncing through a workqueue, which should reduce io latency dramatically. IOWs, XFS should see a nice performance bump for both IO paths. I did a test-merge with the main upstream branch as of a few minutes ago, and didn't see any conflicts. Please let me know if you encounter any problems. As for XFS -- as has been widely covered elsewhere, I have stepped down from the maintainer role and welcome Chandan Babu as the new release manager. Please expect the XFS pull request for 6.6 to come from him in a few days. He and I haven't quite finished the gpg-and-korg git tree transition process yet, so please excuse any bumps along the way. Nearly all the patches are from me anyway, so he and I have both been running QA on the 6.6 merge branch in parallel for the past few weeks. --D The following changes since commit 6eaae198076080886b9e7d57f4ae06fa782f90ef: Linux 6.5-rc3 (2023-07-23 15:24:10 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git tags/iomap-6.6-merge-3 for you to fetch changes up to 377698d4abe2cd118dd866d5ef19e2f1aa6b9758: Merge tag 'xfs-async-dio.6-2023-08-01' of git://git.kernel.dk/linux into iomap-6.6-mergeA (2023-08-01 16:41:49 -0700) ---------------------------------------------------------------- New code for 6.6: * Make large writes to the page cache fill sparse parts of the cache with large folios, then use large memcpy calls for the large folio. * Track the per-block dirty state of each large folio so that a buffered write to a single byte on a large folio does not result in a (potentially) multi-megabyte writeback IO. * Allow some directio completions to be performed in the initiating task's context instead of punting through a workqueue. This will reduce latency for some io_uring requests. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> ---------------------------------------------------------------- Darrick J. Wong (3): Merge tag 'large-folio-writes' of git://git.infradead.org/users/willy/pagecache into iomap-6.6-merge Merge tag 'iomap-per-block-dirty-tracking' of https://github.com/riteshharjani/linux into iomap-6.6-merge Merge tag 'xfs-async-dio.6-2023-08-01' of git://git.kernel.dk/linux into iomap-6.6-mergeA Jens Axboe (8): iomap: cleanup up iomap_dio_bio_end_io() iomap: use an unsigned type for IOMAP_DIO_* defines iomap: treat a write through cache the same as FUA iomap: only set iocb->private for polled bio iomap: add IOMAP_DIO_INLINE_COMP fs: add IOCB flags related to passing back dio completions io_uring/rw: add write support for IOCB_DIO_CALLER_COMP iomap: support IOCB_DIO_CALLER_COMP Matthew Wilcox (Oracle) (10): iov_iter: Map the page later in copy_page_from_iter_atomic() iov_iter: Handle compound highmem pages in copy_page_from_iter_atomic() iov_iter: Add copy_folio_from_iter_atomic() iomap: Remove large folio handling in iomap_invalidate_folio() doc: Correct the description of ->release_folio iomap: Remove unnecessary test from iomap_release_folio() filemap: Add fgf_t typedef filemap: Allow __filemap_get_folio to allocate large folios iomap: Create large folios in the buffered write path iomap: Copy larger chunks from userspace Ritesh Harjani (IBM) (8): iomap: Rename iomap_page to iomap_folio_state and others iomap: Drop ifs argument from iomap_set_range_uptodate() iomap: Add some uptodate state handling helpers for ifs state bitmap iomap: Fix possible overflow condition in iomap_write_delalloc_scan iomap: Use iomap_punch_t typedef iomap: Refactor iomap_write_delalloc_punch() function out iomap: Allocate ifs in ->write_begin() early iomap: Add per-block dirty state tracking to improve performance Documentation/filesystems/locking.rst | 15 +- fs/btrfs/file.c | 6 +- fs/f2fs/compress.c | 2 +- fs/f2fs/f2fs.h | 2 +- fs/gfs2/aops.c | 2 +- fs/gfs2/bmap.c | 2 +- fs/iomap/buffered-io.c | 469 +++++++++++++++++++++++----------- fs/iomap/direct-io.c | 161 +++++++++--- fs/xfs/xfs_aops.c | 2 +- fs/zonefs/file.c | 2 +- include/linux/fs.h | 35 ++- include/linux/iomap.h | 3 +- include/linux/pagemap.h | 82 +++++- include/linux/uio.h | 9 +- io_uring/rw.c | 27 +- lib/iov_iter.c | 43 ++-- mm/filemap.c | 65 ++--- mm/folio-compat.c | 2 +- mm/readahead.c | 13 - 19 files changed, 660 insertions(+), 282 deletions(-)