[RFC v2 00/11] enable bs > ps for block devices

Luis Chamberlain
2024-12-14T03:11:08Z

Now that LBS is upstream on v6.12 and we have bs > ps for filesystems
this address support for up bs > ps block devices. The first RFC v1 was
posted [0] before the turkey massacre in the US. The changes on this v2
addrsess all the feedback from that series.

The changes on this v2:

- Simplfy with folio_pos() as suggested by Matthew Wilcox
- To address support to reduce the buffer head array of
size MAX_BUF_PER_PAGE to avoid stack growth growth warnings
on systems with large base page sizes such as Hexagon with 256 KiB
base page sizes I've added the async batch helper bh_read_batch_async()
and iterator support for block_read_full_folio().
- Simplify the bdev_io_min() as suggested by Christoph Hellwig
- Collect tags, and minor comment enhancements and remove new header
inclusions where not actually needed

This still goes out as RFCs as I'm still not done with my testing. As part
of my test plan I'm including a baseline of ext4 as we're mucking around with
buffer heads and testing xfs alone won't help to ensure we don't regress
existing buffer head users. I'm also testing XFS with 32k sector size support
given part of this enablement is to allow filesystems to also increase their
support sector size.

Patches 2-4 are really the meat and bones behind these changes and careful
review is appreciated. I suspect a bit of bike shedding potential is in order
there as well for those patches.

If you'd like to help test this, this is available in the kdevops linux
branch large-block-buffer-heads-for-next [1]. It is based on v6.13-rc2, and
on that tree has a fix not yet merged on v6.13-rc2 which is required for LBS.
That fix is already being tested and planned for v6.13-rc3, I carry since
otherwise you wound't be able to mount any LBS filesystem with a filesystem
block size larger than 16k.

[0] https://lkml.kernel.org/r/20241113094727.1497722-1-mcgrof@kernel.org
[1] https://github.com/linux-kdevops/linux/tree/large-block-buffer-heads-for-next

Hannes Reinecke (3):
fs/mpage: use blocks_per_folio instead of blocks_per_page
fs/mpage: avoid negative shift for large blocksize
block/bdev: enable large folio support for large logical block sizes

Luis Chamberlain (8):
fs/buffer: move async batch read code into a helper
fs/buffer: add a for_each_bh() for block_read_full_folio()
fs/buffer: add iteration support for block_read_full_folio()
fs/buffer: reduce stack usage on bh_read_iter()
fs/buffer fs/mpage: remove large folio restriction
block/bdev: lift block size restrictions and use common definition
nvme: remove superfluous block size check
bdev: use bdev_io_min() for statx block size

block/bdev.c | 13 +--
drivers/nvme/host/core.c | 10 --
fs/buffer.c | 209 +++++++++++++++++++++++++++------------
fs/mpage.c | 47 +++++----
include/linux/blkdev.h | 11 ++-
5 files changed, 187 insertions(+), 103 deletions(-)

--
2.43.0