From a08bf4b9f87898628e70882430b8dd4260730dba Mon Sep 17 00:00:00 2001 From: Julian Sun Date: Thu, 15 Oct 2026 17:11:04 +0800 Subject: [PATCH] block: reject NOWAIT buffered write fallback blkdev_write_iter() rejects NOWAIT buffered writes, but does not enforce this restriction when direct I/O falls back to buffered I/O. Successful fallback waits for writeback, violating NOWAIT semantics. Reject NOWAIT requests in blkdev_buffered_write() with -EAGAIN. Fixes: c35fc7a5abae ("block_dev: support RFW_NOWAIT on block device nodes") Signed-off-by: Julian Sun Link: https://patch.msgid.link/20261015091105.1315605-2-sunjunchao@bytedance.com Signed-off-by: Jens Axboe --- block/fops.c | 4 ++++ 1 file changed, 4 insertions(+) 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); }