mbox series

[RFC,00/18] block: update buffer_head for Large-block I/O

Message ID 20230918110510.66470-1-hare@suse.de (mailing list archive)
Headers show
Series block: update buffer_head for Large-block I/O | expand

Message

Hannes Reinecke Sept. 18, 2023, 11:04 a.m. UTC
Hi all,

to make life a little bit more interesting, here is an alternative
patchset to enable large-block I/O for buffer_head. Based on top of
current linus master, no special tweaking required.
And yes, I am _very_ much aware of hch's work to disable buffer_head for iomap.

Key point here is that we can enable large block I/O for buffer heads
if we always consider the page reference in 'struct buffer_head' to be
a folio, and always calculcate the size of the page reference with using
folio_size(). That way we keep the assumptions that each page (or, in our
context, each folio) has a pointer (or a list of pointers) to a struct
buffer_head, and each buffer_head has a pointer to exactly one page/folio.
Then it's just a matter of auditing the page cache to always looks at the
folio and not the page, and the work's pretty much done.

Famous last words.

Patchset also contains an update to 'brd' to enable large block sizes.
For testing please do:

# modprobe brd rd_size=524288 rd_blksize=16384 rd_logical_blksize=16384
# mkfs.xfs -b size=16384

As usual, comments and reviews are welcome.

Hannes Reinecke (16):
  mm/readahead: rework loop in page_cache_ra_unbounded()
  fs/mpage: use blocks_per_folio instead of blocks_per_page
  block/buffer_head: introduce block_{index_to_sector,sector_to_index}
  fs/buffer.c: use accessor function to translate page index to sectors
  fs/mpage: use accessor function to translate page index to sectors
  mm/filemap: allocate folios with mapping order preference
  mm/readahead: allocate folios with mapping order preference
  fs/buffer: use mapping order in grow_dev_page()
  block/bdev: lift restrictions on supported blocksize
  block/bdev: enable large folio support for large logical block sizes
  brd: convert to folios
  brd: abstract page_size conventions
  brd: use memcpy_{to,from}_folio()
  brd: make sector size configurable
  brd: make logical sector size configurable
  xfs: remove check for block sizes smaller than PAGE_SIZE

Matthew Wilcox (Oracle) (1):
  fs: Allow fine-grained control of folio sizes

Pankaj Raghav (1):
  nvme: enable logical block size > PAGE_SIZE

 block/bdev.c                |  15 ++-
 drivers/block/brd.c         | 256 ++++++++++++++++++++----------------
 drivers/nvme/host/core.c    |   2 +-
 fs/buffer.c                 |  20 +--
 fs/mpage.c                  |  54 ++++----
 fs/xfs/xfs_super.c          |  12 --
 include/linux/buffer_head.h |  17 +++
 include/linux/pagemap.h     |  48 ++++++-
 mm/filemap.c                |  20 ++-
 mm/readahead.c              |  52 +++++---
 10 files changed, 305 insertions(+), 191 deletions(-)