All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: Matthew Wilcox <willy@infradead.org>
Cc: Luis Chamberlain <mcgrof@kernel.org>,
	Christoph Hellwig <hch@lst.de>, Jens Axboe <axboe@kernel.dk>,
	Pankaj Raghav <p.raghav@samsung.com>,
	linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	Hannes Reinecke <hare@suse.de>
Subject: [RFC PATCH 00/18] block: update buffer_head for Large-block I/O
Date: Mon, 18 Sep 2023 13:04:52 +0200	[thread overview]
Message-ID: <20230918110510.66470-1-hare@suse.de> (raw)

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


             reply	other threads:[~2023-09-18 11:06 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-18 11:04 Hannes Reinecke [this message]
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 12:29   ` [lkp] [+550 bytes kernel size regression] [i386-tinyconfig] [8558b2228d] " kernel test robot
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230918110510.66470-1-hare@suse.de \
    --to=hare@suse.de \
    --cc=axboe@kernel.dk \
    --cc=hch@lst.de \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=p.raghav@samsung.com \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.