* REQ_NOAIT cleanups
@ 2026-05-18 6:33 Christoph Hellwig
2026-05-18 6:33 ` [PATCH 1/2] direct-io: remove IOCB_NOWAIT support Christoph Hellwig
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Christoph Hellwig @ 2026-05-18 6:33 UTC (permalink / raw)
To: Jens Axboe; +Cc: Christian Brauner, Jan Kara, linux-fsdevel, linux-block
Hi all,
this series cleans up spurious code related to REQ_NOWAIT handling.
I have block layer work depending on this pending, so merging it through
the block tree would be helpful.
Diffstat:
fs/direct-io.c | 15 ++++-----------
include/linux/bio.h | 1 -
2 files changed, 4 insertions(+), 12 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/2] direct-io: remove IOCB_NOWAIT support
2026-05-18 6:33 REQ_NOAIT cleanups Christoph Hellwig
@ 2026-05-18 6:33 ` Christoph Hellwig
2026-05-18 9:34 ` Damien Le Moal
` (2 more replies)
2026-05-18 6:33 ` [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN Christoph Hellwig
2026-05-26 16:37 ` REQ_NOAIT cleanups Jens Axboe
2 siblings, 3 replies; 11+ messages in thread
From: Christoph Hellwig @ 2026-05-18 6:33 UTC (permalink / raw)
To: Jens Axboe; +Cc: Christian Brauner, Jan Kara, linux-fsdevel, linux-block
None of the file systems using the legacy direct I/O code actually sets
FMODE_NOWAIT, and if they did this would not work, as the write locking
could not handle the retry. Remove this dead code.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
fs/direct-io.c | 15 ++++-----------
1 file changed, 4 insertions(+), 11 deletions(-)
diff --git a/fs/direct-io.c b/fs/direct-io.c
index 2267f5ae7f77..9e4976716985 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -502,12 +502,8 @@ static blk_status_t dio_bio_complete(struct dio *dio, struct bio *bio)
const enum req_op dio_op = dio->opf & REQ_OP_MASK;
bool should_dirty = dio_op == REQ_OP_READ && dio->should_dirty;
- if (err) {
- if (err == BLK_STS_AGAIN && (bio->bi_opf & REQ_NOWAIT))
- dio->io_error = -EAGAIN;
- else
- dio->io_error = -EIO;
- }
+ if (err)
+ dio->io_error = -EIO;
if (dio->is_async && should_dirty) {
bio_check_pages_dirty(bio); /* transfers ownership */
@@ -1178,13 +1174,10 @@ ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
dio->is_async = true;
dio->inode = inode;
- if (iov_iter_rw(iter) == WRITE) {
+ if (iov_iter_rw(iter) == WRITE)
dio->opf = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE;
- if (iocb->ki_flags & IOCB_NOWAIT)
- dio->opf |= REQ_NOWAIT;
- } else {
+ else
dio->opf = REQ_OP_READ;
- }
/*
* For AIO O_(D)SYNC writes we need to defer completions to a workqueue
--
2.53.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN
2026-05-18 6:33 REQ_NOAIT cleanups Christoph Hellwig
2026-05-18 6:33 ` [PATCH 1/2] direct-io: remove IOCB_NOWAIT support Christoph Hellwig
@ 2026-05-18 6:33 ` Christoph Hellwig
2026-05-18 9:34 ` Damien Le Moal
2026-05-18 12:34 ` Jan Kara
2026-05-26 16:37 ` REQ_NOAIT cleanups Jens Axboe
2 siblings, 2 replies; 11+ messages in thread
From: Christoph Hellwig @ 2026-05-18 6:33 UTC (permalink / raw)
To: Jens Axboe; +Cc: Christian Brauner, Jan Kara, linux-fsdevel, linux-block
Commit abb30460bda2 ("block: mark bio_wouldblock_error() bio with
BIO_QUIET") added this to suppress buffer_head warnings, but neither
when this commit was added nor now any buffer_head using code actually
ever sets REQ_NOWAIT which can lead to BLK_STS_AGAIN.
Remove the special handling for now. If we ever plan to use REQ_NOWAIT
for buffer_head based I/O we're better off handling BLK_STS_AGAIN in
the completion handler as it actually needs to retry the I/O as well.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
include/linux/bio.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 85463981d0f5..7597ae4dc52b 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -379,7 +379,6 @@ static inline void bio_io_error(struct bio *bio)
static inline void bio_wouldblock_error(struct bio *bio)
{
- bio_set_flag(bio, BIO_QUIET);
bio->bi_status = BLK_STS_AGAIN;
bio_endio(bio);
}
--
2.53.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] direct-io: remove IOCB_NOWAIT support
2026-05-18 6:33 ` [PATCH 1/2] direct-io: remove IOCB_NOWAIT support Christoph Hellwig
@ 2026-05-18 9:34 ` Damien Le Moal
2026-05-18 12:09 ` Jan Kara
2026-05-18 12:26 ` Christian Brauner
2 siblings, 0 replies; 11+ messages in thread
From: Damien Le Moal @ 2026-05-18 9:34 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe
Cc: Christian Brauner, Jan Kara, linux-fsdevel, linux-block
On 2026/05/18 8:33, Christoph Hellwig wrote:
> None of the file systems using the legacy direct I/O code actually sets
> FMODE_NOWAIT, and if they did this would not work, as the write locking
> could not handle the retry. Remove this dead code.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Looks OK to me.
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
--
Damien Le Moal
Western Digital Research
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN
2026-05-18 6:33 ` [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN Christoph Hellwig
@ 2026-05-18 9:34 ` Damien Le Moal
2026-05-18 12:34 ` Jan Kara
1 sibling, 0 replies; 11+ messages in thread
From: Damien Le Moal @ 2026-05-18 9:34 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe
Cc: Christian Brauner, Jan Kara, linux-fsdevel, linux-block
On 2026/05/18 8:33, Christoph Hellwig wrote:
> Commit abb30460bda2 ("block: mark bio_wouldblock_error() bio with
> BIO_QUIET") added this to suppress buffer_head warnings, but neither
> when this commit was added nor now any buffer_head using code actually
> ever sets REQ_NOWAIT which can lead to BLK_STS_AGAIN.
>
> Remove the special handling for now. If we ever plan to use REQ_NOWAIT
> for buffer_head based I/O we're better off handling BLK_STS_AGAIN in
> the completion handler as it actually needs to retry the I/O as well.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Looks OK to me.
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
--
Damien Le Moal
Western Digital Research
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] direct-io: remove IOCB_NOWAIT support
2026-05-18 6:33 ` [PATCH 1/2] direct-io: remove IOCB_NOWAIT support Christoph Hellwig
2026-05-18 9:34 ` Damien Le Moal
@ 2026-05-18 12:09 ` Jan Kara
2026-05-18 12:26 ` Christian Brauner
2 siblings, 0 replies; 11+ messages in thread
From: Jan Kara @ 2026-05-18 12:09 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Jens Axboe, Christian Brauner, Jan Kara, linux-fsdevel,
linux-block
On Mon 18-05-26 08:33:29, Christoph Hellwig wrote:
> None of the file systems using the legacy direct I/O code actually sets
> FMODE_NOWAIT, and if they did this would not work, as the write locking
> could not handle the retry. Remove this dead code.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
I agree there's no point in bothering with this. Feel free to add:
Reviewed-by: Jan Kara <jack@suse.cz>
Honza
> ---
> fs/direct-io.c | 15 ++++-----------
> 1 file changed, 4 insertions(+), 11 deletions(-)
>
> diff --git a/fs/direct-io.c b/fs/direct-io.c
> index 2267f5ae7f77..9e4976716985 100644
> --- a/fs/direct-io.c
> +++ b/fs/direct-io.c
> @@ -502,12 +502,8 @@ static blk_status_t dio_bio_complete(struct dio *dio, struct bio *bio)
> const enum req_op dio_op = dio->opf & REQ_OP_MASK;
> bool should_dirty = dio_op == REQ_OP_READ && dio->should_dirty;
>
> - if (err) {
> - if (err == BLK_STS_AGAIN && (bio->bi_opf & REQ_NOWAIT))
> - dio->io_error = -EAGAIN;
> - else
> - dio->io_error = -EIO;
> - }
> + if (err)
> + dio->io_error = -EIO;
>
> if (dio->is_async && should_dirty) {
> bio_check_pages_dirty(bio); /* transfers ownership */
> @@ -1178,13 +1174,10 @@ ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
> dio->is_async = true;
>
> dio->inode = inode;
> - if (iov_iter_rw(iter) == WRITE) {
> + if (iov_iter_rw(iter) == WRITE)
> dio->opf = REQ_OP_WRITE | REQ_SYNC | REQ_IDLE;
> - if (iocb->ki_flags & IOCB_NOWAIT)
> - dio->opf |= REQ_NOWAIT;
> - } else {
> + else
> dio->opf = REQ_OP_READ;
> - }
>
> /*
> * For AIO O_(D)SYNC writes we need to defer completions to a workqueue
> --
> 2.53.0
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] direct-io: remove IOCB_NOWAIT support
2026-05-18 6:33 ` [PATCH 1/2] direct-io: remove IOCB_NOWAIT support Christoph Hellwig
2026-05-18 9:34 ` Damien Le Moal
2026-05-18 12:09 ` Jan Kara
@ 2026-05-18 12:26 ` Christian Brauner
2 siblings, 0 replies; 11+ messages in thread
From: Christian Brauner @ 2026-05-18 12:26 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: Jens Axboe, Jan Kara, linux-fsdevel, linux-block
On Mon, May 18, 2026 at 08:33:29AM +0200, Christoph Hellwig wrote:
> None of the file systems using the legacy direct I/O code actually sets
> FMODE_NOWAIT, and if they did this would not work, as the write locking
> could not handle the retry. Remove this dead code.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
Reviewed-by: Christian Brauner <brauner@kernel.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN
2026-05-18 6:33 ` [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN Christoph Hellwig
2026-05-18 9:34 ` Damien Le Moal
@ 2026-05-18 12:34 ` Jan Kara
2026-05-18 12:51 ` Christoph Hellwig
1 sibling, 1 reply; 11+ messages in thread
From: Jan Kara @ 2026-05-18 12:34 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Jens Axboe, Christian Brauner, Jan Kara, linux-fsdevel,
linux-block
On Mon 18-05-26 08:33:30, Christoph Hellwig wrote:
> Commit abb30460bda2 ("block: mark bio_wouldblock_error() bio with
> BIO_QUIET") added this to suppress buffer_head warnings, but neither
> when this commit was added nor now any buffer_head using code actually
> ever sets REQ_NOWAIT which can lead to BLK_STS_AGAIN.
>
> Remove the special handling for now. If we ever plan to use REQ_NOWAIT
> for buffer_head based I/O we're better off handling BLK_STS_AGAIN in
> the completion handler as it actually needs to retry the I/O as well.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
So I agree about the bh argument but bio_wouldblock_error() is not specific
to bh path in any way, is it? So do we expect all bi_end_io handlers to
check for BLK_STS_AGAIN and avoid complaining to logs in case of that? Not
that all of them would be currently checking for BIO_QUIET either so I'm
mostly trying to figure out what's the expected handling.
Honza
> ---
> include/linux/bio.h | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/include/linux/bio.h b/include/linux/bio.h
> index 85463981d0f5..7597ae4dc52b 100644
> --- a/include/linux/bio.h
> +++ b/include/linux/bio.h
> @@ -379,7 +379,6 @@ static inline void bio_io_error(struct bio *bio)
>
> static inline void bio_wouldblock_error(struct bio *bio)
> {
> - bio_set_flag(bio, BIO_QUIET);
> bio->bi_status = BLK_STS_AGAIN;
> bio_endio(bio);
> }
> --
> 2.53.0
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN
2026-05-18 12:34 ` Jan Kara
@ 2026-05-18 12:51 ` Christoph Hellwig
2026-05-18 13:03 ` Jan Kara
0 siblings, 1 reply; 11+ messages in thread
From: Christoph Hellwig @ 2026-05-18 12:51 UTC (permalink / raw)
To: Jan Kara
Cc: Christoph Hellwig, Jens Axboe, Christian Brauner, linux-fsdevel,
linux-block
On Mon, May 18, 2026 at 02:34:49PM +0200, Jan Kara wrote:
> > Commit abb30460bda2 ("block: mark bio_wouldblock_error() bio with
> > BIO_QUIET") added this to suppress buffer_head warnings, but neither
> > when this commit was added nor now any buffer_head using code actually
> > ever sets REQ_NOWAIT which can lead to BLK_STS_AGAIN.
> >
> > Remove the special handling for now. If we ever plan to use REQ_NOWAIT
> > for buffer_head based I/O we're better off handling BLK_STS_AGAIN in
> > the completion handler as it actually needs to retry the I/O as well.
> >
> > Signed-off-by: Christoph Hellwig <hch@lst.de>
>
> So I agree about the bh argument but bio_wouldblock_error() is not specific
> to bh path in any way, is it? So do we expect all bi_end_io handlers to
> check for BLK_STS_AGAIN and avoid complaining to logs in case of that? Not
> that all of them would be currently checking for BIO_QUIET either so I'm
> mostly trying to figure out what's the expected handling.
File system would need special handling for BLK_STS_AGAIN were we to wire
it up again (in upstream we have the dead direct-io code removed in
patch 1, and an incorrect use in iomap polled I/O I sent a separate patch
for), because simply bubbling it up as -EAGAIN will generally do the
wrong thing. We ran into file system corruption last time we did it due
to non-idempotency of writes and general locking issues with just
retrying at a higher level.
Thus the rough consensus was that If we want to support fs-issued
REQ_NOWAIT I/O we'd first need to add infrastructure to retry them from
a blocking context at the bio-level, preferably in the block layer
itself.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN
2026-05-18 12:51 ` Christoph Hellwig
@ 2026-05-18 13:03 ` Jan Kara
0 siblings, 0 replies; 11+ messages in thread
From: Jan Kara @ 2026-05-18 13:03 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Jan Kara, Jens Axboe, Christian Brauner, linux-fsdevel,
linux-block
On Mon 18-05-26 14:51:09, Christoph Hellwig wrote:
> On Mon, May 18, 2026 at 02:34:49PM +0200, Jan Kara wrote:
> > > Commit abb30460bda2 ("block: mark bio_wouldblock_error() bio with
> > > BIO_QUIET") added this to suppress buffer_head warnings, but neither
> > > when this commit was added nor now any buffer_head using code actually
> > > ever sets REQ_NOWAIT which can lead to BLK_STS_AGAIN.
> > >
> > > Remove the special handling for now. If we ever plan to use REQ_NOWAIT
> > > for buffer_head based I/O we're better off handling BLK_STS_AGAIN in
> > > the completion handler as it actually needs to retry the I/O as well.
> > >
> > > Signed-off-by: Christoph Hellwig <hch@lst.de>
> >
> > So I agree about the bh argument but bio_wouldblock_error() is not specific
> > to bh path in any way, is it? So do we expect all bi_end_io handlers to
> > check for BLK_STS_AGAIN and avoid complaining to logs in case of that? Not
> > that all of them would be currently checking for BIO_QUIET either so I'm
> > mostly trying to figure out what's the expected handling.
>
> File system would need special handling for BLK_STS_AGAIN were we to wire
> it up again (in upstream we have the dead direct-io code removed in
> patch 1, and an incorrect use in iomap polled I/O I sent a separate patch
> for), because simply bubbling it up as -EAGAIN will generally do the
> wrong thing. We ran into file system corruption last time we did it due
> to non-idempotency of writes and general locking issues with just
> retrying at a higher level.
>
> Thus the rough consensus was that If we want to support fs-issued
> REQ_NOWAIT I/O we'd first need to add infrastructure to retry them from
> a blocking context at the bio-level, preferably in the block layer
> itself.
OK, fair. Thanks for explanation. So this flagging with quiet is indeed
pointless. Feel free to add:
Reviewed-by: Jan Kara <jack@suse.cz>
Honza
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: REQ_NOAIT cleanups
2026-05-18 6:33 REQ_NOAIT cleanups Christoph Hellwig
2026-05-18 6:33 ` [PATCH 1/2] direct-io: remove IOCB_NOWAIT support Christoph Hellwig
2026-05-18 6:33 ` [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN Christoph Hellwig
@ 2026-05-26 16:37 ` Jens Axboe
2 siblings, 0 replies; 11+ messages in thread
From: Jens Axboe @ 2026-05-26 16:37 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: Christian Brauner, Jan Kara, linux-fsdevel, linux-block
On Mon, 18 May 2026 08:33:28 +0200, Christoph Hellwig wrote:
> this series cleans up spurious code related to REQ_NOWAIT handling.
>
> I have block layer work depending on this pending, so merging it through
> the block tree would be helpful.
>
> Diffstat:
> fs/direct-io.c | 15 ++++-----------
> include/linux/bio.h | 1 -
> 2 files changed, 4 insertions(+), 12 deletions(-)
>
> [...]
Applied, thanks!
[1/2] direct-io: remove IOCB_NOWAIT support
commit: ef9049ec8b9fd6c508832d9f7ab12029f3355102
[2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN
commit: 481105a949c8d11f7aa770b45fc4c8efcc53f205
Best regards,
--
Jens Axboe
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-05-26 16:37 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-18 6:33 REQ_NOAIT cleanups Christoph Hellwig
2026-05-18 6:33 ` [PATCH 1/2] direct-io: remove IOCB_NOWAIT support Christoph Hellwig
2026-05-18 9:34 ` Damien Le Moal
2026-05-18 12:09 ` Jan Kara
2026-05-18 12:26 ` Christian Brauner
2026-05-18 6:33 ` [PATCH 2/2] block: don't set BIO_QUIET for BLK_STS_AGAIN Christoph Hellwig
2026-05-18 9:34 ` Damien Le Moal
2026-05-18 12:34 ` Jan Kara
2026-05-18 12:51 ` Christoph Hellwig
2026-05-18 13:03 ` Jan Kara
2026-05-26 16:37 ` REQ_NOAIT cleanups Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox