[PATCH v4 00/12] Change readahead API

From: Matthew Wilcox
Date: Sat Feb 01 2020 - 10:13:15 EST


From: "Matthew Wilcox (Oracle)" <willy@xxxxxxxxxxxxx>

I would particularly value feedback on this from the gfs2 and ocfs2
maintainers. They have non-trivial changes, and a review on patch 5
would be greatly appreciated.

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/

v4:
- Rebase on current Linus (a62aa6f7f50a ("Merge tag 'gfs2-for-5.6'"))
- Add comment to __do_page_cache_readahead() acknowledging we don't
care _that_ much about setting PageReadahead.
- Fix the return value check of add_to_page_cache_lru().
- Add a missing call to put_page() in __do_page_cache_readahead() if
we fail to insert the page.
- Improve the documentation of ->readahead (including indentation
problem identified by Randy).
- Fix off by one error in read_pages() (Dave Chinner).
- Fix nr_pages manipulation in btrfs (Dave Chinner).
- Remove bogus refcount fix in erofs (Gao Xiang, Dave Chinner).
- Update ext4 patch for Merkle tree readahead.
- Update f2fs patch for Merkle tree readahead.
- Reinstate next_page label in f2fs_readpages() now it's used by the
compression code.
- Reinstate call to fuse_wait_on_page_writeback (Miklos Szeredi).
- Remove a double-unlock in the error path in fuse.
- Remove an odd fly-speck in fuse_readpages().
- Make nr_pages loop in fuse_readpages less convoluted (Dave Chinner).

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 | 14 +++++
drivers/staging/exfat/exfat_super.c | 9 +--
fs/block_dev.c | 9 +--
fs/btrfs/extent_io.c | 19 +++---
fs/btrfs/extent_io.h | 2 +-
fs/btrfs/inode.c | 18 +++---
fs/erofs/data.c | 33 ++++------
fs/erofs/zdata.c | 21 +++----
fs/ext2/inode.c | 12 ++--
fs/ext4/ext4.h | 5 +-
fs/ext4/inode.c | 24 ++++----
fs/ext4/readpage.c | 20 +++---
fs/ext4/verity.c | 16 +++--
fs/f2fs/data.c | 35 +++++------
fs/f2fs/f2fs.h | 5 +-
fs/f2fs/verity.c | 16 +++--
fs/fat/inode.c | 8 +--
fs/fuse/file.c | 37 +++++------
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 | 89 ++++++++++++++++++---------
42 files changed, 332 insertions(+), 349 deletions(-)

--
2.24.1