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