From: Christoph Hellwig <hch@infradead.org>
To: Jens Axboe <axboe@kernel.dk>
Cc: Christoph Hellwig <hch@infradead.org>,
io-uring@vger.kernel.org, linux-block@vger.kernel.org
Subject: Re: [PATCH 2/3] block: mark bdev files as FMODE_NOWAIT if underlying device supports it
Date: Mon, 19 Jun 2023 23:18:55 -0700 [thread overview]
Message-ID: <ZJFEz2FKuvIf8aCL@infradead.org> (raw)
In-Reply-To: <8d5daf0d-c623-5918-d40e-ab3ad1c508ad@kernel.dk>
So it turns out this gets into the way of my planned cleanup to move
all the tatic FMODE_ flags out of this basically full field into a new
static one in file_operations. Do you think it is ok to go back to
always claiming FMODE_NOWAIT for block devices and then just punt for
the drivers that don't support it like the patch below?
---
From 05a591ac066d9d2d57c4967bbd49c8bc63b04abf Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <hch@lst.de>
Date: Tue, 20 Jun 2023 07:53:13 +0200
Subject: block: always set FMODE_NOWAIT
Block devices are the only file_operation that do not set FMODE_NOWAIT
unconditionall in ->open and thus get in the way of a planned cleanup to
move this flags into a static field in file_operations. Switch to
always set FMODE_NOWAIT and just return -EAGAIN if it isn't actually
supported. This just affects minor ->submit_bio based drivers as all
blk-mq drivers and the important remappers (dm, md, nvme-multipath)
support nowait I/O.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
block/fops.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/block/fops.c b/block/fops.c
index 555b1b9ecd2cb9..8068d0c85ae75b 100644
--- a/block/fops.c
+++ b/block/fops.c
@@ -505,7 +505,7 @@ static int blkdev_open(struct inode *inode, struct file *filp)
* during an unstable branch.
*/
filp->f_flags |= O_LARGEFILE;
- filp->f_mode |= FMODE_BUF_RASYNC;
+ filp->f_mode |= FMODE_BUF_RASYNC | FMODE_NOWAIT;
/*
* Use the file private data to store the holder for exclusive openes.
@@ -519,9 +519,6 @@ static int blkdev_open(struct inode *inode, struct file *filp)
if (IS_ERR(bdev))
return PTR_ERR(bdev);
- if (bdev_nowait(bdev))
- filp->f_mode |= FMODE_NOWAIT;
-
filp->f_mapping = bdev->bd_inode->i_mapping;
filp->f_wb_err = filemap_sample_wb_err(filp->f_mapping);
return 0;
@@ -563,6 +560,9 @@ static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
if ((iocb->ki_flags & (IOCB_NOWAIT | IOCB_DIRECT)) == IOCB_NOWAIT)
return -EOPNOTSUPP;
+ if (!bdev_nowait(bdev))
+ return -EAGAIN;
+
size -= iocb->ki_pos;
if (iov_iter_count(from) > size) {
shorted = iov_iter_count(from) - size;
@@ -585,6 +585,9 @@ static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
ssize_t ret = 0;
size_t count;
+ if (!bdev_nowait(bdev))
+ return -EAGAIN;
+
if (unlikely(pos + iov_iter_count(to) > size)) {
if (pos >= size)
return 0;
--
2.39.2
next prev parent reply other threads:[~2023-06-20 6:18 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-09 15:19 [PATCHSET 0/3] Improve FMODE_NOWAIT coverage Jens Axboe
2023-05-09 15:19 ` [PATCH 1/3] net: set FMODE_NOWAIT for sockets Jens Axboe
2023-05-11 8:03 ` Paolo Abeni
2023-05-11 13:30 ` Jens Axboe
2023-05-09 15:19 ` [PATCH 2/3] block: mark bdev files as FMODE_NOWAIT if underlying device supports it Jens Axboe
2023-05-10 13:30 ` Christoph Hellwig
2023-05-10 15:32 ` Jens Axboe
2023-06-20 6:18 ` Christoph Hellwig [this message]
2023-06-20 8:22 ` Christoph Hellwig
2023-06-20 13:24 ` Jens Axboe
2023-06-20 13:29 ` Christoph Hellwig
2023-06-20 14:56 ` Jens Axboe
2023-05-09 15:19 ` [PATCH 3/3] io_uring: rely solely on FMODE_NOWAIT Jens Axboe
2023-05-09 16:48 ` Linus Torvalds
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=ZJFEz2FKuvIf8aCL@infradead.org \
--to=hch@infradead.org \
--cc=axboe@kernel.dk \
--cc=io-uring@vger.kernel.org \
--cc=linux-block@vger.kernel.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.