From: Keith Busch <kbusch@xxxxxxxxxx> Previous version: https://lore.kernel.org/linux-block/20250805141123.332298-1-kbusch@xxxxxxxx/ This series removes the direct io requirement that io vector lengths align to the logical block size. I tested this on a few raw block device types including nvme, virtio-blk, ahci, and loop. NVMe is the only one I tested with 4k logical sectors; everything else was 512. On each of those, I tested several iomap filesystems: xfs, ext4, and btrfs. I found it interesting that each behave a little differently with handling invalid vector alignments: - XFS is the most straight forward and reports failures on invalid vector conditions, same as raw blocks devices. - EXT4 falls back to buffered io for writes but not for reads. - BTRFS doesn't even try direct io for any unusual alignments; it chooses buffered io from the start. So it has been a little slow going figuring out which results to expect from various tests, but I think I've got all the corner cases covered. I can submit the tests cases to blktests and fstests for consideration separately, too. I'm not 100% sure where we're at with the last patch. I think Mike initially indicated this was okay to remove, but I could swear I read something saying that might not be the case anymore. I just can't find the message now. Mike? Changes from v2: Include vector lengths when validating a split. The length check is only valid for r/w commands, and skipped for passthrough DRV_IN/DRV_OUT commands. Introduce a prep patch having bio_iov_iter_get_pages() take the caller's desired length alignment. Additional code comments explaing less obvious error conditions. Added reviews on the patches that haven't changed. Keith Busch (8): block: check for valid bio while splitting block: add size alignment to bio_iov_iter_get_pages block: align the bio after building it block: simplify direct io validity check iomap: simplify direct io validity check block: remove bdev_iter_is_aligned blk-integrity: use simpler alignment check iov_iter: remove iov_iter_is_aligned block/bio-integrity.c | 4 +- block/bio.c | 64 ++++++++++++++++++---------- block/blk-map.c | 2 +- block/blk-merge.c | 20 +++++++-- block/fops.c | 13 +++--- fs/iomap/direct-io.c | 6 +-- include/linux/bio.h | 13 ++++-- include/linux/blkdev.h | 20 +++++---- include/linux/uio.h | 2 - lib/iov_iter.c | 95 ------------------------------------------ 10 files changed, 94 insertions(+), 145 deletions(-) -- 2.47.3