Skip to content

Commit

Permalink
block: add a helper function for dio alignment
Browse files Browse the repository at this point in the history
This will make it easier to add more complex acceptable alignment
criteria in the future.

Signed-off-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20220610195830.3574005-6-kbusch@fb.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Keith Busch authored and Jens Axboe committed Jun 27, 2022
1 parent 4a2dcc3 commit 37fee2e
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions block/fops.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ static unsigned int dio_bio_write_op(struct kiocb *iocb)
return op;
}

static bool blkdev_dio_unaligned(struct block_device *bdev, loff_t pos,
struct iov_iter *iter)
{
return ((pos | iov_iter_alignment(iter)) &
(bdev_logical_block_size(bdev) - 1));
}

#define DIO_INLINE_BIO_VECS 4

static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb,
Expand All @@ -54,8 +61,7 @@ static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb,
struct bio bio;
ssize_t ret;

if ((pos | iov_iter_alignment(iter)) &
(bdev_logical_block_size(bdev) - 1))
if (blkdev_dio_unaligned(bdev, pos, iter))
return -EINVAL;

if (nr_pages <= DIO_INLINE_BIO_VECS)
Expand Down Expand Up @@ -173,8 +179,7 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
loff_t pos = iocb->ki_pos;
int ret = 0;

if ((pos | iov_iter_alignment(iter)) &
(bdev_logical_block_size(bdev) - 1))
if (blkdev_dio_unaligned(bdev, pos, iter))
return -EINVAL;

if (iocb->ki_flags & IOCB_ALLOC_CACHE)
Expand Down Expand Up @@ -298,8 +303,7 @@ static ssize_t __blkdev_direct_IO_async(struct kiocb *iocb,
loff_t pos = iocb->ki_pos;
int ret = 0;

if ((pos | iov_iter_alignment(iter)) &
(bdev_logical_block_size(bdev) - 1))
if (blkdev_dio_unaligned(bdev, pos, iter))
return -EINVAL;

if (iocb->ki_flags & IOCB_ALLOC_CACHE)
Expand Down

0 comments on commit 37fee2e

Please sign in to comment.