On Tue, Jun 07, 2022 at 04:09:57AM +0000, Al Viro wrote: > explicitly tell iomap to do it, rather than messing with IOCB_DSYNC > [folded a fix for braino spotted by willy] Please split the iomap and btrfs side into separate patches. > +++ b/fs/btrfs/inode.c > @@ -8152,7 +8152,7 @@ ssize_t btrfs_dio_rw(struct kiocb *iocb, struct iov_iter *iter, size_t done_befo > struct btrfs_dio_data data; > > return iomap_dio_rw(iocb, iter, &btrfs_dio_iomap_ops, &btrfs_dio_ops, > - IOMAP_DIO_PARTIAL, &data, done_before); > + IOMAP_DIO_PARTIAL | IOMAP_DIO_NOSYNC, &data, done_before); Please avoid the overly long line. > diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c > index 370c3241618a..0f16479b13d6 100644 > --- a/fs/iomap/direct-io.c > +++ b/fs/iomap/direct-io.c > @@ -548,7 +548,7 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, > } > > /* for data sync or sync, we need sync completion processing */ > - if (iocb->ki_flags & IOCB_DSYNC) > + if (iocb->ki_flags & IOCB_DSYNC && !(dio_flags & IOMAP_DIO_NOSYNC)) Same here. Also the FUA check below needs to check IOMAP_DIO_NOSYNC as well.