Re: [PATCH v2 0/7] block device fixes for large block sizes, IOCB_NOWAIT, and direct I/O

From: Tal Zussman

Date: Fri Sep 04 2026 - 12:27:18 EST


On 8/28/26 4:49 PM, Tal Zussman wrote:
> A set of independent fixes for the block device file operations. The
> first two were found by Sashiko while reviewing the RWF_DONTCACHE series
> [1]. The fourth and fifth were found by Sashiko's review of v1 of this
> series, and the rest came from asking an LLM to find any similar or
> related issues. Each issue has been reproduced, with the fixes resolving
> the issues.
>
> Patch 1 fixes silently lost mmap writes with CONFIG_BUFFER_HEAD=n.
>
> Patches 2 and 3 take i_rwsem around the direct I/O write fallback and
> the splice read path, which race set_blocksize() changing the mapping's
> minimum folio order.
>
> Patch 4 makes the buffered read path honor IOCB_NOWAIT instead of
> blocking on i_rwsem.
>
> Patch 5 makes IOCB_ATOMIC writes fail instead of tearing and falling
> back to buffered I/O. Block devices can reject both paths into the
> fallback before submitting any I/O, so we fail rather than issue a
> WARN() like ext4 does.
>
> Patch 6 fixes leaked page pins in bio_iov_iter_align_down(), and patch
> 7 removes dead metadata handling in the async direct I/O path.
>
> These issues are currently unlikely to be hit in practice due to the
> specific configurations required to trigger them.
>
> The reproducer for patch 1 has been submitted to blktests [2].
>

FYI the reproducer has been merged to blktests as block/048.

> [1] https://lore.kernel.org/all/20260730-blk-dontcache-v7-0-3e8e6850068d@xxxxxxxxxxxx/
> [2] https://github.com/linux-blktests/blktests/pull/258
>
> ---
> Changes in v2:
> - Rebase on current master.
> - 1/7: Add Christoph's Reviewed-by and submit the reproducer to
> blktests.
> - 2/7: Skip the buffered fallback for IOCB_NOWAIT direct writes, per
> Sashiko.
> - 2/7: Change the Fixes: commit from c0e473a0d226 to 3c20917120ce
> - 3/7 to 7/7: New patches.
> - Link to v1: https://lore.kernel.org/r/20260802-blkdev-fixes-v1-0-a82fc549fd74@xxxxxxxxxxxx
>
> ---
> Tal Zussman (7):
> block: use iomap_dirty_folio for block devices
> block: take i_rwsem for the direct I/O write fallback
> block: take i_rwsem for the splice read path
> block: honor IOCB_NOWAIT in the block device buffered read path
> block: fail atomic writes instead of falling back to buffered I/O
> block: unpin all pages of a bvec in bio_iov_iter_align_down()
> block: remove dead metadata handling from the async direct I/O path
>
> block/bio.c | 18 ++++++++++++-
> block/fops.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++------------
> 2 files changed, 84 insertions(+), 18 deletions(-)
> ---
> base-commit: 1b78070aaef63512688aebfbc82365ef9d6660f1
> change-id: 20260801-blkdev-fixes-771b1c314ebb
>
> Best regards,