From: "Matthew Wilcox (Oracle)" <willy@xxxxxxxxxxxxx> This series adds a readahead address_space operation to eventually replace the readpages operation. The key difference is that pages are added to the page cache as they are allocated (and then looked up by the filesystem) instead of passing them on a list to the readpages operation and having the filesystem add them to the page cache. It's a net reduction in code for each implementation, more efficient than walking a list, and solves the direct-write vs buffered-read problem reported by yu kuai at https://lore.kernel.org/linux-fsdevel/20200116063601.39201-1-yukuai3@xxxxxxxxxx/ Matthew Wilcox (Oracle) (12): mm: Fix the return type of __do_page_cache_readahead readahead: Ignore return value of ->readpages readahead: Put pages in cache earlier mm: Add readahead address space operation fs: Convert mpage_readpages to mpage_readahead btrfs: Convert from readpages to readahead erofs: Convert uncompressed files from readpages to readahead erofs: Convert compressed files from readpages to readahead ext4: Convert from readpages to readahead f2fs: Convert from readpages to readahead fuse: Convert from readpages to readahead iomap: Convert from readpages to readahead Documentation/filesystems/locking.rst | 7 ++- Documentation/filesystems/vfs.rst | 11 ++++ drivers/staging/exfat/exfat_super.c | 9 ++-- fs/block_dev.c | 9 ++-- fs/btrfs/extent_io.c | 15 ++---- fs/btrfs/extent_io.h | 2 +- fs/btrfs/inode.c | 18 +++---- fs/erofs/data.c | 34 +++++------- fs/erofs/zdata.c | 21 +++----- fs/ext2/inode.c | 12 ++--- fs/ext4/ext4.h | 2 +- fs/ext4/inode.c | 24 ++++----- fs/ext4/readpage.c | 20 +++---- fs/f2fs/data.c | 33 +++++------- fs/fat/inode.c | 8 +-- fs/fuse/file.c | 35 ++++++------ fs/gfs2/aops.c | 20 ++++--- fs/hpfs/file.c | 8 +-- fs/iomap/buffered-io.c | 74 ++++++-------------------- fs/iomap/trace.h | 2 +- fs/isofs/inode.c | 9 ++-- fs/jfs/inode.c | 8 +-- fs/mpage.c | 38 +++++--------- fs/nilfs2/inode.c | 13 ++--- fs/ocfs2/aops.c | 32 +++++------ fs/omfs/file.c | 8 +-- fs/qnx6/inode.c | 8 +-- fs/reiserfs/inode.c | 10 ++-- fs/udf/inode.c | 8 +-- fs/xfs/xfs_aops.c | 10 ++-- include/linux/fs.h | 2 + include/linux/iomap.h | 2 +- include/linux/mpage.h | 2 +- include/linux/pagemap.h | 12 +++++ include/trace/events/erofs.h | 6 +-- include/trace/events/f2fs.h | 6 +-- mm/internal.h | 2 +- mm/migrate.c | 2 +- mm/readahead.c | 76 +++++++++++++++++---------- 39 files changed, 289 insertions(+), 329 deletions(-) -- 2.24.1