From: John Garry <john.garry@linux.dev>
To: Tal Zussman <tz2294@columbia.edu>, Jens Axboe <axboe@kernel.dk>,
Christoph Hellwig <hch@lst.de>,
Johannes Thumshirn <johannes.thumshirn@wdc.com>,
Luis Chamberlain <mcgrof@kernel.org>,
Hannes Reinecke <hare@kernel.org>,
"Matthew Wilcox (Oracle)" <willy@infradead.org>,
Christian Brauner <brauner@kernel.org>,
"Darrick J. Wong" <djwong@kernel.org>,
Keith Busch <kbusch@kernel.org>,
"Martin K. Petersen" <mkp@kernel.org>
Cc: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>,
linux-block@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 6/8] block: don't fall back to buffered I/O for atomic writes
Date: Tue, 22 Sep 2026 11:05:55 +0100 [thread overview]
Message-ID: <c0613627-9801-473e-8120-4d4a83133391@linux.dev> (raw)
In-Reply-To: <20260921-blkdev-fixes-v4-6-e2801f71ede9@columbia.edu>
On 9/22/26 03:54, Tal Zussman wrote:
> blkdev_direct_write() turns an -EBUSY from page cache invalidation into
> a 0 return, so an IOCB_ATOMIC write is retried in full through
> blkdev_buffered_write(), with no atomicity guarantee.
>
> Skip the buffered fallback in blkdev_write_iter() for IOCB_ATOMIC, as
> it already does for IOCB_NOWAIT, so the -EBUSY case returns -EAGAIN and
> the caller retries, matching __iomap_dio_rw().
>
> ext4 has the same fallback and only warns in it. For block devices the
> fallback can be skipped before any I/O is submitted, so fail early
> instead.
>
> Fixes: caf336f81b3a ("block: Add fops atomic write support")
> Reported-by: Sashiko <sashiko-bot@kernel.org>
> Link: https://sashiko.dev/#/patchset/20260802-blkdev-fixes-v1-0-a82fc549fd74%40columbia.edu?part=2
> Assisted-by: Claude:claude-fable-5
> Signed-off-by: Tal Zussman <tz2294@columbia.edu>
Note that I still think that you can add an IOCB_ATOMIC check in
iomap_file_buffered_write() (until it does handle IOCB_ATOMIC).
Reviewed-by: John Garry <john.garry@linux.dev>
> ---
> block/fops.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/block/fops.c b/block/fops.c
> index 90777e8a9a6c..7f23778f6b81 100644
> --- a/block/fops.c
> +++ b/block/fops.c
> @@ -766,10 +766,11 @@ static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
> if (iocb->ki_flags & IOCB_DIRECT) {
> ret = blkdev_direct_write(iocb, from);
> if (ret >= 0 && iov_iter_count(from)) {
> - if (iocb->ki_flags & IOCB_NOWAIT) {
> + if (iocb->ki_flags & (IOCB_NOWAIT | IOCB_ATOMIC)) {
> /*
> * The buffered fallback blocks on i_rwsem and
> - * on writeback of the data it copied: return
> + * on writeback of the data it copied, and
> + * can't provide torn-write protection: return
> * the short direct write instead and let the
> * caller retry.
> */
>
next prev parent reply other threads:[~2026-09-22 10:06 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 2:53 [PATCH v4 0/8] block device fixes for large block sizes, IOCB_NOWAIT, and direct I/O Tal Zussman
2026-09-22 2:53 ` [PATCH v4 1/8] block: use iomap_dirty_folio for block devices Tal Zussman
2026-09-22 2:53 ` [PATCH v4 2/8] block: take i_rwsem for the direct I/O write fallback Tal Zussman
2026-09-22 2:54 ` [PATCH v4 3/8] block: take i_rwsem for the splice read path Tal Zussman
2026-09-22 2:54 ` [PATCH v4 4/8] block: honor IOCB_NOWAIT in the block device buffered " Tal Zussman
2026-09-22 2:54 ` [PATCH v4 5/8] block: fail a short atomic pin in bio_iov_iter_get_pages() Tal Zussman
2026-09-22 5:40 ` Hannes Reinecke
2026-09-23 23:37 ` Tal Zussman
2026-09-22 10:16 ` John Garry
2026-09-23 23:38 ` Tal Zussman
2026-09-22 2:54 ` [PATCH v4 6/8] block: don't fall back to buffered I/O for atomic writes Tal Zussman
2026-09-22 5:41 ` Hannes Reinecke
2026-09-22 10:05 ` John Garry [this message]
2026-09-23 23:39 ` Tal Zussman
2026-09-22 2:54 ` [PATCH v4 7/8] block: unpin all pages of a bvec in bio_iov_iter_align_down() Tal Zussman
2026-09-22 13:09 ` Christoph Hellwig
2026-09-22 2:54 ` [PATCH v4 8/8] block: remove dead metadata handling from the async direct I/O path Tal Zussman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c0613627-9801-473e-8120-4d4a83133391@linux.dev \
--to=john.garry@linux.dev \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=djwong@kernel.org \
--cc=hare@kernel.org \
--cc=hch@lst.de \
--cc=johannes.thumshirn@wdc.com \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mcgrof@kernel.org \
--cc=mkp@kernel.org \
--cc=shinichiro.kawasaki@wdc.com \
--cc=tz2294@columbia.edu \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.