mbox series

[v2,00/28] iomap/xfs folio patches

Message ID 20211108040551.1942823-1-willy@infradead.org (mailing list archive)
Headers show
Series iomap/xfs folio patches | expand

Message

Matthew Wilcox (Oracle) Nov. 8, 2021, 4:05 a.m. UTC
This patchset converts XFS & iomap to use folios, and gets them to a
state where they can handle multi-page folios.  Applying these patches
is not yet sufficient to actually start using multi-page folios for
XFS; more page cache changes are needed.  I don't anticipate needing to
touch XFS again until we're at the point where we want to convert the
aops to be type-safe.  It completes an xfstests run with no unexpected
failures.  Most of these patches have been posted before and I've retained
acks/reviews where I thought them reasonable.  Some patches are new.

v2:
 - Added review tags from Jens, Darrick & Christoph (thanks!)
 - Added folio_zero_* wrappers around zero_user_*()
 - Added a patch to rename AS_THP_SUPPORT
 - Added a patch to convert __block_write_begin_int() to take a folio
 - Split the iomap_add_to_ioend() patch into three
 - Updated changelog of bio_add_folio() (Jens)
 - Adjusted whitespace of bio patches (Christoph, Jens)
 - Improved changelog of readahead conversion to explain why the put_page()
   disappeared (Christoph)
 - Add a patch to zero an entire folio at a time, instead of limiting to
   a page
 - Switch pos & end_pos back to being u64 from loff_t
 - Call block_write_end() and ->page_done with the head page of the folio,
   as that's what those functions expect.

I intend to push patch 1 upstream myself (before 5.16), but I've included
it here to avoid nasty messages from the build-bots.  I can probably
persuade Linus to take patches 2-4 as well if Darrick's not comfortable
taking them as part of the iomap changes.

These changes are also available at:
  git://git.infradead.org/users/willy/pagecache.git heads/folio-iomap

I intend to rebase that branch to include any further R-b tags (some of
the patches are new and don't have reviews).

Matthew Wilcox (Oracle) (28):
  csky,sparc: Declare flush_dcache_folio()
  mm: Add functions to zero portions of a folio
  fs: Remove FS_THP_SUPPORT
  fs: Rename AS_THP_SUPPORT and mapping_thp_support
  block: Add bio_add_folio()
  block: Add bio_for_each_folio_all()
  fs/buffer: Convert __block_write_begin_int() to take a folio
  iomap: Convert to_iomap_page to take a folio
  iomap: Convert iomap_page_create to take a folio
  iomap: Convert iomap_page_release to take a folio
  iomap: Convert iomap_releasepage to use a folio
  iomap: Add iomap_invalidate_folio
  iomap: Pass the iomap_page into iomap_set_range_uptodate
  iomap: Convert bio completions to use folios
  iomap: Use folio offsets instead of page offsets
  iomap: Convert iomap_read_inline_data to take a folio
  iomap: Convert readahead and readpage to use a folio
  iomap: Convert iomap_page_mkwrite to use a folio
  iomap: Convert __iomap_zero_iter to use a folio
  iomap: Convert iomap_write_begin() and iomap_write_end() to folios
  iomap: Convert iomap_write_end_inline to take a folio
  iomap,xfs: Convert ->discard_page to ->discard_folio
  iomap: Simplify iomap_writepage_map()
  iomap: Simplify iomap_do_writepage()
  iomap: Convert iomap_add_to_ioend() to take a folio
  iomap: Convert iomap_migrate_page() to use folios
  iomap: Support multi-page folios in invalidatepage
  xfs: Support multi-page folios

 Documentation/core-api/kernel-api.rst  |   1 +
 arch/csky/abiv1/inc/abi/cacheflush.h   |   1 +
 arch/csky/abiv2/inc/abi/cacheflush.h   |   2 +
 arch/sparc/include/asm/cacheflush_32.h |   1 +
 arch/sparc/include/asm/cacheflush_64.h |   1 +
 block/bio.c                            |  22 ++
 fs/buffer.c                            |  22 +-
 fs/inode.c                             |   2 -
 fs/internal.h                          |   2 +-
 fs/iomap/buffered-io.c                 | 506 +++++++++++++------------
 fs/xfs/xfs_aops.c                      |  24 +-
 fs/xfs/xfs_icache.c                    |   2 +
 include/linux/bio.h                    |  56 ++-
 include/linux/fs.h                     |   1 -
 include/linux/highmem.h                |  44 ++-
 include/linux/iomap.h                  |   3 +-
 include/linux/pagemap.h                |  26 +-
 mm/highmem.c                           |   2 -
 mm/shmem.c                             |   3 +-
 19 files changed, 431 insertions(+), 290 deletions(-)