From: Keith Busch Date: Wed, 27 Aug 2025 14:12:54 +0000 (-0700) Subject: block: simplify direct io validity check X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5ff3f74e145adc79b49668adb8de276446acf6be;p=thirdparty%2Fkernel%2Fstable.git block: simplify direct io validity check The block layer checks all the segments for validity later, so no need for an early check. Just reduce it to a simple position and total length check, and defer the more invasive segment checks to the block layer. Signed-off-by: Keith Busch Reviewed-by: Hannes Reinecke Reviewed-by: Martin K. Petersen Reviewed-by: Christoph Hellwig Signed-off-by: Jens Axboe --- diff --git a/block/fops.c b/block/fops.c index d136fb5f6b6ab..19814bddd77e2 100644 --- a/block/fops.c +++ b/block/fops.c @@ -38,8 +38,8 @@ static blk_opf_t dio_bio_write_op(struct kiocb *iocb) static bool blkdev_dio_invalid(struct block_device *bdev, struct kiocb *iocb, struct iov_iter *iter) { - return iocb->ki_pos & (bdev_logical_block_size(bdev) - 1) || - !bdev_iter_is_aligned(bdev, iter); + return (iocb->ki_pos | iov_iter_count(iter)) & + (bdev_logical_block_size(bdev) - 1); } #define DIO_INLINE_BIO_VECS 4