Re: [PATCHv6 11/11] iomap: add support for dma aligned direct-io

Eric Biggers
2022-07-22T18:12:50Z

On Fri, Jul 22, 2022 at 10:53:42AM -0700, Darrick J. Wong wrote:
> On Fri, Jul 22, 2022 at 12:36:01AM -0700, Eric Biggers wrote:
> > [+f2fs list and maintainers]
> >
> > On Fri, Jun 10, 2022 at 12:58:30PM -0700, Keith Busch wrote:
> > > From: Keith Busch <kbusch@kernel.org>
> > >
> > > Use the address alignment requirements from the block_device for direct
> > > io instead of requiring addresses be aligned to the block size.
> > >
> > > Signed-off-by: Keith Busch <kbusch@kernel.org>
> > > Reviewed-by: Christoph Hellwig <hch@lst.de>
> > > ---
> > > fs/iomap/direct-io.c | 4 ++--
> > > 1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c
> > > index 370c3241618a..5d098adba443 100644
> > > --- a/fs/iomap/direct-io.c
> > > +++ b/fs/iomap/direct-io.c
> > > @@ -242,7 +242,6 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter,
> > > struct inode *inode = iter->inode;
> > > unsigned int blkbits = blksize_bits(bdev_logical_block_size(iomap->bdev));
> > > unsigned int fs_block_size = i_blocksize(inode), pad;
> > > - unsigned int align = iov_iter_alignment(dio->submit.iter);
> > > loff_t length = iomap_length(iter);
> > > loff_t pos = iter->pos;
> > > unsigned int bio_opf;
> > > @@ -253,7 +252,8 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter,
> > > size_t copied = 0;
> > > size_t orig_count;
> > >
> > > - if ((pos | length | align) & ((1 << blkbits) - 1))
> > > + if ((pos | length) & ((1 << blkbits) - 1) ||
> > > + !bdev_iter_is_aligned(iomap->bdev, dio->submit.iter))
>
> How does this change intersect with "make statx() return DIO alignment
> information" ? Will the new STATX_DIOALIGN implementations have to be
> adjusted to set stx_dio_mem_align = bdev_dma_alignment(...)?
>
> I'm guessing the answer is yes, but I haven't seen any patches on the
> list to do that, but more and more these days email behaves like a flood
> of UDP traffic... :(
>

Yes. I haven't done that in the STATX_DIOALIGN patchset yet because I've been
basing it on upstream, which doesn't yet have this iomap patch. I haven't been
expecting STATX_DIOALIGN to make 5.20, given that it's a new UAPI that needs
time to be properly reviewed, plus I've just been busy with other things. So
I've been planning to make the above change after this patch lands upstream.

- Eric