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,
        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)
        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)
        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)