linux-block.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 00/18] block: update buffer_head for Large-block I/O
@ 2023-09-18 11:04 Hannes Reinecke
  2023-09-18 11:04 ` [PATCH 01/18] mm/readahead: rework loop in page_cache_ra_unbounded() Hannes Reinecke
                   ` (17 more replies)
  0 siblings, 18 replies; 38+ messages in thread
From: Hannes Reinecke @ 2023-09-18 11:04 UTC (permalink / raw)
  To: Matthew Wilcox
  Cc: Luis Chamberlain, Christoph Hellwig, Jens Axboe, Pankaj Raghav,
	linux-block, linux-fsdevel, Hannes Reinecke

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(-)

-- 
2.35.3


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

end of thread, other threads:[~2023-10-23  5:03 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-18 11:04 [RFC PATCH 00/18] block: update buffer_head for Large-block I/O Hannes Reinecke
2023-09-18 11:04 ` [PATCH 01/18] mm/readahead: rework loop in page_cache_ra_unbounded() Hannes Reinecke
     [not found]   ` <CGME20230920115645eucas1p1c8ed9bf515c4532b3e6995f8078a863b@eucas1p1.samsung.com>
2023-09-20 11:56     ` Pankaj Raghav
2023-09-20 14:13       ` Hannes Reinecke
2023-09-21  9:06         ` Pankaj Raghav
2023-09-20 14:18       ` Matthew Wilcox
2023-09-18 11:04 ` [PATCH 02/18] fs/mpage: use blocks_per_folio instead of blocks_per_page Hannes Reinecke
2023-09-18 13:15   ` Matthew Wilcox
2023-09-18 17:45     ` Hannes Reinecke
2023-09-18 11:04 ` [PATCH 03/18] block/buffer_head: introduce block_{index_to_sector,sector_to_index} Hannes Reinecke
2023-09-18 16:36   ` Matthew Wilcox
2023-09-18 17:42     ` Hannes Reinecke
2023-09-18 21:01       ` Matthew Wilcox
2023-09-18 11:04 ` [PATCH 04/18] fs/buffer.c: use accessor function to translate page index to sectors Hannes Reinecke
2023-10-20 19:37   ` Matthew Wilcox
2023-10-21  5:08     ` Matthew Wilcox
2023-10-23  5:03     ` Hannes Reinecke
2023-09-18 11:04 ` [PATCH 05/18] fs/mpage: " Hannes Reinecke
2023-09-18 11:04 ` [PATCH 06/18] fs: Allow fine-grained control of folio sizes Hannes Reinecke
2023-09-18 11:04 ` [PATCH 07/18] mm/filemap: allocate folios with mapping order preference Hannes Reinecke
2023-09-18 13:41   ` Matthew Wilcox
2023-09-18 17:34     ` Hannes Reinecke
2023-09-18 11:05 ` [PATCH 08/18] mm/readahead: " Hannes Reinecke
2023-09-18 13:11   ` kernel test robot
2023-09-18 20:46   ` kernel test robot
2023-09-18 11:05 ` [PATCH 09/18] fs/buffer: use mapping order in grow_dev_page() Hannes Reinecke
2023-09-18 14:00   ` Matthew Wilcox
2023-09-18 17:38     ` Hannes Reinecke
2023-09-18 11:05 ` [PATCH 10/18] block/bdev: lift restrictions on supported blocksize Hannes Reinecke
2023-09-18 11:05 ` [PATCH 11/18] block/bdev: enable large folio support for large logical block sizes Hannes Reinecke
2023-09-18 11:05 ` [PATCH 12/18] brd: convert to folios Hannes Reinecke
2023-09-18 11:05 ` [PATCH 13/18] brd: abstract page_size conventions Hannes Reinecke
2023-09-18 11:05 ` [PATCH 14/18] brd: use memcpy_{to,from}_folio() Hannes Reinecke
2023-09-18 11:05 ` [PATCH 15/18] brd: make sector size configurable Hannes Reinecke
2023-09-18 11:05 ` [PATCH 16/18] brd: make logical " Hannes Reinecke
2023-09-18 11:05 ` [PATCH 17/18] xfs: remove check for block sizes smaller than PAGE_SIZE Hannes Reinecke
2023-09-20  2:13   ` Dave Chinner
2023-09-18 11:05 ` [PATCH 18/18] nvme: enable logical block size > PAGE_SIZE Hannes Reinecke

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).