mm/filemap.c has accumulated additional infrastructure over the years
that is not directly related to the page cache. It is currently nearly
5000 lines long. This series splits out the folio bit-lock and wait
queue code into separate files, and moves the VFS-level
generic_file_{read,write}_iter() family of files to fs/read_write.c, in
order to provide better separation of concerns. This also slims down
mm/filemap.c by ~1000 lines.
The folio wait infrastructure is centralized in mm/folio_wait.c and
include/linux/folio_wait.h, with functions moved from mm/filemap.c,
mm/page-writeback.c, and include/linux/pagemap.h. Afterwards, the code
is cleaned up a little, with functions and data types renamed to refer
to folios rather than pages.
generic_file_{read,write}_iter() implement the VFS-level read/write path
for filesystems, including support for direct I/O. These functions and
their helpers are moved to fs/read_write.c, along with other VFS-level
read/write functions. dir_pages() is also moved to include/linux/fs.h.
i_blocks_per_folio() is not moved from include/linux/pagemap.h, as it
requires folio_size(), which is not currently available in
include/linux/fs.h.
No functional change is intended.
Note: I have additional cleanups to mm/filemap.c ready to go, foremost
among them centralizing on the filemap_*() naming convention and making
the exposed page cache API clearer and more consistent, but I've split
these patches off from that in order to avoid sending these logically
separate patches to ~60 maintainers.
---
Tal Zussman (11):
mm: add folio_wake_writeback() helper
folio_wait: move folio bit-lock and wait implementation to mm/folio_wait.c
folio_wait: move folio bit-lock and wait declarations to include/linux/folio_wait.h
folio_wait: move folio_wait_writeback() family to mm/folio_wait.c
folio_wait: reformat comments and fix alignment
folio_wait: rename wait_page_* infrastructure to wait_folio_*
folio_wait: convert VM_BUG_ON_FOLIO() to VM_WARN_ON_ONCE_FOLIO()
MAINTAINERS: add folio_wait files to MEMORY MANAGEMENT - CORE
fs: move dir_pages() from <linux/pagemap.h> to <linux/fs.h>
fs: move generic_file_read_iter() to fs/read_write.c
fs: move generic_file_write_iter() family to fs/read_write.c
MAINTAINERS | 2 +
fs/read_write.c | 358 ++++++++++++++++
include/linux/folio_wait.h | 183 +++++++++
include/linux/fs.h | 19 +-
include/linux/pagemap.h | 184 +--------
io_uring/rw.c | 14 +-
io_uring/rw.h | 6 +-
mm/Makefile | 2 +-
mm/filemap.c | 993 +--------------------------------------------
mm/folio_wait.c | 710 ++++++++++++++++++++++++++++++++
mm/internal.h | 4 +
mm/page-writeback.c | 66 ---
12 files changed, 1285 insertions(+), 1256 deletions(-)
---
base-commit: e9add7501ad3297dad9b90ce201266830a68ab47
change-id: 20260511-filemap-split-871b5c18e98c
Best regards,
--
Tal Zussman <tz2294@columbia.edu>