linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 00/19] Change readahead API
@ 2020-02-17 18:45 Matthew Wilcox
  2020-02-17 18:45 ` [PATCH v6 01/19] mm: Return void from various readahead functions Matthew Wilcox
                   ` (34 more replies)
  0 siblings, 35 replies; 111+ messages in thread
From: Matthew Wilcox @ 2020-02-17 18:45 UTC (permalink / raw)
  To: linux-fsdevel
  Cc: Matthew Wilcox (Oracle),
	linux-mm, linux-kernel, linux-btrfs, linux-erofs, linux-ext4,
	linux-f2fs-devel, cluster-devel, ocfs2-devel, linux-xfs

From: "Matthew Wilcox (Oracle)" <willy@infradead.org>

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@huawei.com/

The only unconverted filesystems are those which use fscache.
Their conversion is pending Dave Howells' rewrite which will make the
conversion substantially easier.

v6:
 - Name the private members of readahead_control with a leading underscore
   (suggested by Christoph Hellwig)
 - Fix whitespace in rst file
 - Remove misleading comment in btrfs patch
 - Add readahead_next() API and use it in iomap
 - Add iomap_readahead kerneldoc.
 - Fix the mpage_readahead kerneldoc
 - Make various readahead functions return void
 - Keep readahead_index() and readahead_offset() pointing to the start of
   this batch through the body.  No current user requires this, but it's
   less surprising.
 - Add kerneldoc for page_cache_readahead_limit
 - Make page_idx an unsigned long, and rename it to just 'i'
 - Get rid of page_offset local variable
 - Add patch to call memalloc_nofs_save() before allocating pages (suggested
   by Michal Hocko)
 - Resplit a lot of patches for more logical progression and easier review
   (suggested by John Hubbard)
 - Added sign-offs where received, and I deemed still relevant

v5 switched to passing a readahead_control struct (mirroring the
writepages_control struct passed to writepages).  This has a number of
advantages:
 - It fixes a number of bugs in various implementations, eg forgetting to
   increment 'start', an off-by-one error in 'nr_pages' or treating 'start'
   as a byte offset instead of a page offset.
 - It allows us to change the arguments without changing all the
   implementations of ->readahead which just call mpage_readahead() or
   iomap_readahead()
 - Figuring out which pages haven't been attempted by the implementation
   is more natural this way.
 - There's less code in each implementation.

Matthew Wilcox (Oracle) (19):
  mm: Return void from various readahead functions
  mm: Ignore return value of ->readpages
  mm: Use readahead_control to pass arguments
  mm: Rearrange readahead loop
  mm: Remove 'page_offset' from readahead loop
  mm: rename readahead loop variable to 'i'
  mm: Put readahead pages in cache earlier
  mm: Add readahead address space operation
  mm: Add page_cache_readahead_limit
  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: Restructure iomap_readpages_actor
  iomap: Convert from readpages to readahead
  mm: Use memalloc_nofs_save in readahead path

 Documentation/filesystems/locking.rst |   6 +-
 Documentation/filesystems/vfs.rst     |  13 ++
 drivers/staging/exfat/exfat_super.c   |   7 +-
 fs/block_dev.c                        |   7 +-
 fs/btrfs/extent_io.c                  |  46 ++-----
 fs/btrfs/extent_io.h                  |   3 +-
 fs/btrfs/inode.c                      |  16 +--
 fs/erofs/data.c                       |  39 ++----
 fs/erofs/zdata.c                      |  29 ++--
 fs/ext2/inode.c                       |  10 +-
 fs/ext4/ext4.h                        |   3 +-
 fs/ext4/inode.c                       |  23 ++--
 fs/ext4/readpage.c                    |  22 ++-
 fs/ext4/verity.c                      |  35 +----
 fs/f2fs/data.c                        |  50 +++----
 fs/f2fs/f2fs.h                        |   5 +-
 fs/f2fs/verity.c                      |  35 +----
 fs/fat/inode.c                        |   7 +-
 fs/fuse/file.c                        |  46 +++----
 fs/gfs2/aops.c                        |  23 ++--
 fs/hpfs/file.c                        |   7 +-
 fs/iomap/buffered-io.c                | 118 +++++++----------
 fs/iomap/trace.h                      |   2 +-
 fs/isofs/inode.c                      |   7 +-
 fs/jfs/inode.c                        |   7 +-
 fs/mpage.c                            |  38 ++----
 fs/nilfs2/inode.c                     |  15 +--
 fs/ocfs2/aops.c                       |  34 ++---
 fs/omfs/file.c                        |   7 +-
 fs/qnx6/inode.c                       |   7 +-
 fs/reiserfs/inode.c                   |   8 +-
 fs/udf/inode.c                        |   7 +-
 fs/xfs/xfs_aops.c                     |  13 +-
 fs/zonefs/super.c                     |   7 +-
 include/linux/fs.h                    |   2 +
 include/linux/iomap.h                 |   3 +-
 include/linux/mpage.h                 |   4 +-
 include/linux/pagemap.h               |  90 +++++++++++++
 include/trace/events/erofs.h          |   6 +-
 include/trace/events/f2fs.h           |   6 +-
 mm/internal.h                         |   8 +-
 mm/migrate.c                          |   2 +-
 mm/readahead.c                        | 184 +++++++++++++++++---------
 43 files changed, 474 insertions(+), 533 deletions(-)


base-commit: 11a48a5a18c63fd7621bb050228cebf13566e4d8
-- 
2.25.0


^ permalink raw reply	[flat|nested] 111+ messages in thread

end of thread, other threads:[~2020-02-19 20:24 UTC | newest]

Thread overview: 111+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-17 18:45 [PATCH v6 00/19] Change readahead API Matthew Wilcox
2020-02-17 18:45 ` [PATCH v6 01/19] mm: Return void from various readahead functions Matthew Wilcox
2020-02-18  4:47   ` Dave Chinner
2020-02-18 21:05   ` John Hubbard
2020-02-18 21:21     ` Matthew Wilcox
2020-02-18 21:52       ` John Hubbard
2020-02-17 18:45 ` [PATCH v6 02/19] mm: Ignore return value of ->readpages Matthew Wilcox
2020-02-18  4:48   ` Dave Chinner
2020-02-18 21:33   ` John Hubbard
2020-02-17 18:45 ` [PATCH v6 03/19] mm: Use readahead_control to pass arguments Matthew Wilcox
2020-02-18  5:03   ` Dave Chinner
2020-02-18 13:56     ` Matthew Wilcox
2020-02-18 22:46       ` Dave Chinner
2020-02-18 22:52         ` Matthew Wilcox
2020-02-18 22:22   ` John Hubbard
2020-02-17 18:45 ` [PATCH v6 04/19] mm: Rearrange readahead loop Matthew Wilcox
2020-02-18  5:08   ` Dave Chinner
2020-02-18 13:57     ` Matthew Wilcox
2020-02-18 22:48       ` Dave Chinner
2020-02-18 22:33   ` John Hubbard
2020-02-17 18:45 ` [PATCH v6 04/16] mm: Tweak readahead loop slightly Matthew Wilcox
2020-02-18 22:57   ` John Hubbard
2020-02-18 23:00     ` John Hubbard
2020-02-17 18:45 ` [PATCH v6 05/16] mm: Put readahead pages in cache earlier Matthew Wilcox
2020-02-17 18:45 ` [PATCH v6 05/19] mm: Remove 'page_offset' from readahead loop Matthew Wilcox
2020-02-18  5:14   ` Dave Chinner
2020-02-18 23:08   ` John Hubbard
2020-02-17 18:45 ` [PATCH v6 06/16] mm: Add readahead address space operation Matthew Wilcox
2020-02-17 18:45 ` [PATCH v6 06/19] mm: rename readahead loop variable to 'i' Matthew Wilcox
2020-02-18  5:33   ` Dave Chinner
2020-02-18 23:11   ` John Hubbard
2020-02-17 18:45 ` [PATCH v6 07/16] mm: Add page_cache_readahead_limit Matthew Wilcox
2020-02-17 18:45 ` [PATCH v6 07/19] mm: Put readahead pages in cache earlier Matthew Wilcox
2020-02-18  6:14   ` Dave Chinner
2020-02-18 15:42     ` Matthew Wilcox
2020-02-19  0:59       ` Dave Chinner
2020-02-19  0:01   ` John Hubbard
2020-02-19  1:02     ` Matthew Wilcox
2020-02-19  1:13       ` John Hubbard
2020-02-19  3:24       ` John Hubbard
2020-02-19 14:41     ` Matthew Wilcox
2020-02-19 14:52       ` Christoph Hellwig
2020-02-19 15:01         ` Matthew Wilcox
2020-02-19 20:24           ` John Hubbard
2020-02-17 18:45 ` [PATCH v6 08/16] fs: Convert mpage_readpages to mpage_readahead Matthew Wilcox
2020-02-17 18:45 ` [PATCH v6 08/19] mm: Add readahead address space operation Matthew Wilcox
2020-02-18  6:21   ` Dave Chinner
2020-02-18 16:10     ` Matthew Wilcox
2020-02-19  1:04       ` Dave Chinner
2020-02-19  0:12   ` John Hubbard
2020-02-19  3:10   ` Eric Biggers
2020-02-19  3:35     ` Eric Biggers
2020-02-19 16:52     ` Matthew Wilcox
2020-02-17 18:45 ` [PATCH v6 09/16] btrfs: Convert from readpages to readahead Matthew Wilcox
2020-02-17 18:45 ` [PATCH v6 09/19] mm: Add page_cache_readahead_limit Matthew Wilcox
2020-02-18  6:31   ` Dave Chinner
2020-02-18 19:54     ` Matthew Wilcox
2020-02-19  1:08       ` Dave Chinner
2020-02-19  1:32   ` John Hubbard
2020-02-19  2:23     ` Matthew Wilcox
2020-02-19  2:46       ` John Hubbard
2020-02-17 18:45 ` [PATCH v6 10/16] erofs: Convert uncompressed files from readpages to readahead Matthew Wilcox
2020-02-17 18:45 ` [PATCH v6 10/19] fs: Convert mpage_readpages to mpage_readahead Matthew Wilcox
2020-02-18  1:51   ` [Ocfs2-devel] " Joseph Qi
2020-02-18  6:37   ` Dave Chinner
2020-02-19  2:48   ` John Hubbard
2020-02-19  3:28   ` Eric Biggers
2020-02-19  3:47     ` Matthew Wilcox
2020-02-19  3:55       ` Eric Biggers
2020-02-17 18:45 ` [PATCH v6 11/19] btrfs: Convert from readpages to readahead Matthew Wilcox
2020-02-18  6:57   ` Dave Chinner
2020-02-18 21:12     ` Matthew Wilcox
2020-02-19  1:23       ` Dave Chinner
2020-02-17 18:46 ` [PATCH v6 11/16] erofs: Convert compressed files " Matthew Wilcox
2020-02-19  2:34   ` Gao Xiang
2020-02-17 18:46 ` [PATCH v6 12/19] erofs: Convert uncompressed " Matthew Wilcox
2020-02-19  2:39   ` Gao Xiang
2020-02-19  3:04   ` Dave Chinner
2020-02-17 18:46 ` [PATCH v6 12/16] ext4: Convert " Matthew Wilcox
2020-02-17 18:46 ` [PATCH v6 13/19] erofs: Convert compressed files " Matthew Wilcox
2020-02-19  3:08   ` Dave Chinner
2020-02-17 18:46 ` [PATCH v6 13/16] f2fs: Convert " Matthew Wilcox
2020-02-17 18:46 ` [PATCH v6 14/19] ext4: " Matthew Wilcox
2020-02-19  3:16   ` Dave Chinner
2020-02-19  3:29   ` Eric Biggers
2020-02-17 18:46 ` [PATCH v6 14/16] fuse: " Matthew Wilcox
2020-02-17 18:46 ` [PATCH v6 15/19] f2fs: " Matthew Wilcox
2020-02-17 18:46 ` [PATCH v6 15/16] iomap: " Matthew Wilcox
2020-02-17 18:46 ` [PATCH v6 16/19] fuse: " Matthew Wilcox
2020-02-19  3:22   ` Dave Chinner
2020-02-17 18:46 ` [PATCH v6 16/16] mm: Use memalloc_nofs_save in readahead path Matthew Wilcox
2020-02-17 18:46 ` [PATCH v6 17/19] iomap: Restructure iomap_readpages_actor Matthew Wilcox
2020-02-19  3:17   ` John Hubbard
2020-02-19  5:35     ` Matthew Wilcox
2020-02-19  3:29   ` Dave Chinner
2020-02-19  6:04     ` Matthew Wilcox
2020-02-19  6:40       ` Dave Chinner
2020-02-19 17:06         ` Matthew Wilcox
2020-02-17 18:46 ` [PATCH v6 18/19] iomap: Convert from readpages to readahead Matthew Wilcox
2020-02-19  3:40   ` Dave Chinner
2020-02-17 18:46 ` [PATCH v6 19/19] mm: Use memalloc_nofs_save in readahead path Matthew Wilcox
2020-02-19  3:43   ` Dave Chinner
2020-02-19  5:22     ` Matthew Wilcox
2020-02-17 18:48 ` [PATCH v6 00/19] Change readahead API Matthew Wilcox
2020-02-18  4:56 ` Dave Chinner
2020-02-18 13:42   ` Matthew Wilcox
2020-02-18 21:26     ` Dave Chinner
2020-02-19  3:45       ` Dave Chinner
2020-02-19  3:48         ` Matthew Wilcox
2020-02-19  3:57           ` Dave Chinner
2020-02-18 20:49 ` John Hubbard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).