diff --git a/block/fops.c b/block/fops.c index f3ff4e62413b..07f4d7336a76 100644 --- a/block/fops.c +++ b/block/fops.c @@ -714,6 +714,10 @@ blkdev_direct_write(struct kiocb *iocb, struct iov_iter *from) static ssize_t blkdev_buffered_write(struct kiocb *iocb, struct iov_iter *from) { + /* Buffered fallback waits for writeback, which NOWAIT cannot allow. */ + if (iocb->ki_flags & IOCB_NOWAIT) + return -EAGAIN; + return iomap_file_buffered_write(iocb, from, &blkdev_iomap_ops, NULL, NULL); }