From: Kanchan Joshi <joshiiitr@gmail.com>
To: Christoph Hellwig <hch@lst.de>
Cc: Jens Axboe <axboe@kernel.dk>,
Jeffle Xu <jefflexu@linux.alibaba.com>,
Ming Lei <ming.lei@redhat.com>,
Damien Le Moal <Damien.LeMoal@wdc.com>,
Keith Busch <kbusch@kernel.org>, Sagi Grimberg <sagi@grimberg.me>,
"Wunderlich, Mark" <mark.wunderlich@intel.com>,
"Vasudevan, Anil" <anil.vasudevan@intel.com>,
linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-nvme@lists.infradead.org
Subject: Re: [PATCH 02/15] block: don't try to poll multi-bio I/Os in __blkdev_direct_IO
Date: Sun, 16 May 2021 23:31:35 +0530 [thread overview]
Message-ID: <CA+1E3r+8HrUymD-4Q06drqi_qV_L40OjgPCsw6C_Y6Gn_3FVSg@mail.gmail.com> (raw)
In-Reply-To: <20210512131545.495160-3-hch@lst.de>
On Wed, May 12, 2021 at 6:50 PM Christoph Hellwig <hch@lst.de> wrote:
>
> If an iocb is split into multiple bios we can't poll for both. So don't
> bother to even try to poll in that case.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/block_dev.c | 37 ++++++++++++++-----------------------
> 1 file changed, 14 insertions(+), 23 deletions(-)
>
> diff --git a/fs/block_dev.c b/fs/block_dev.c
> index b8abccd03e5d..0080a3b710b4 100644
> --- a/fs/block_dev.c
> +++ b/fs/block_dev.c
> @@ -375,7 +375,7 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
> struct blk_plug plug;
> struct blkdev_dio *dio;
> struct bio *bio;
> - bool is_poll = (iocb->ki_flags & IOCB_HIPRI) != 0;
> + bool is_poll = (iocb->ki_flags & IOCB_HIPRI), do_poll = false;
> bool is_read = (iov_iter_rw(iter) == READ), is_sync;
> loff_t pos = iocb->ki_pos;
> blk_qc_t qc = BLK_QC_T_NONE;
> @@ -437,22 +437,9 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
> pos += bio->bi_iter.bi_size;
>
> nr_pages = bio_iov_vecs_to_alloc(iter, BIO_MAX_VECS);
> - if (!nr_pages) {
> - bool polled = false;
> -
> - if (iocb->ki_flags & IOCB_HIPRI) {
> - bio_set_polled(bio, iocb);
> - polled = true;
> - }
> -
> - qc = submit_bio(bio);
> -
> - if (polled)
> - WRITE_ONCE(iocb->ki_cookie, qc);
> - break;
> - }
> -
> - if (!dio->multi_bio) {
> + if (dio->multi_bio) {
> + atomic_inc(&dio->ref);
> + } else if (nr_pages) {
> /*
> * AIO needs an extra reference to ensure the dio
> * structure which is embedded into the first bio
> @@ -462,11 +449,16 @@ static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
> bio_get(bio);
> dio->multi_bio = true;
> atomic_set(&dio->ref, 2);
> - } else {
> - atomic_inc(&dio->ref);
> + } else if (is_poll) {
> + bio_set_polled(bio, iocb);
> + do_poll = true;
> + }
> + qc = submit_bio(bio);
> + if (!nr_pages) {
> + if (do_poll)
> + WRITE_ONCE(iocb->ki_cookie, qc);
> + break;
> }
> -
> - submit_bio(bio);
> bio = bio_alloc(GFP_KERNEL, nr_pages);
> }
dio->ref update goes amiss here.
For multi-bio, if the original code sets it as N, this will set it as
N+1, causing endless-wait for the caller.
--
Kanchan
next prev parent reply other threads:[~2021-05-16 18:02 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-12 13:15 switch block layer polling to a bio based model v3 Christoph Hellwig
2021-05-12 13:15 ` [PATCH 01/15] direct-io: remove blk_poll support Christoph Hellwig
2021-05-12 13:15 ` [PATCH 02/15] block: don't try to poll multi-bio I/Os in __blkdev_direct_IO Christoph Hellwig
2021-05-12 20:54 ` Sagi Grimberg
2021-05-16 18:01 ` Kanchan Joshi [this message]
2021-05-12 13:15 ` [PATCH 03/15] iomap: don't try to poll multi-bio I/Os in __iomap_dio_rw Christoph Hellwig
2021-05-12 21:32 ` Darrick J. Wong
2021-05-12 13:15 ` [PATCH 04/15] blk-mq: factor out a blk_qc_to_hctx helper Christoph Hellwig
2021-05-12 20:58 ` Sagi Grimberg
2021-05-12 13:15 ` [PATCH 05/15] blk-mq: factor out a "classic" poll helper Christoph Hellwig
2021-05-12 20:59 ` Sagi Grimberg
2021-05-12 13:15 ` [PATCH 06/15] blk-mq: remove blk_qc_t_to_tag and blk_qc_t_is_internal Christoph Hellwig
2021-05-12 21:42 ` Sagi Grimberg
2021-05-12 13:15 ` [PATCH 07/15] blk-mq: remove blk_qc_t_valid Christoph Hellwig
2021-05-12 21:43 ` Sagi Grimberg
2021-05-12 13:15 ` [PATCH 08/15] io_uring: don't sleep when polling for I/O Christoph Hellwig
2021-05-12 21:55 ` Sagi Grimberg
2021-05-19 13:02 ` Christoph Hellwig
2021-05-12 13:15 ` [PATCH 09/15] block: rename REQ_HIPRI to REQ_POLLED Christoph Hellwig
2021-05-12 21:56 ` Sagi Grimberg
2021-05-12 22:43 ` Chaitanya Kulkarni
2021-05-12 13:15 ` [PATCH 10/15] block: use SLAB_TYPESAFE_BY_RCU for the bio slab Christoph Hellwig
2021-05-12 13:15 ` [PATCH 11/15] block: define 'struct bvec_iter' as packed Christoph Hellwig
2021-05-12 21:58 ` Sagi Grimberg
2021-05-12 13:15 ` [PATCH 12/15] block: switch polling to be bio based Christoph Hellwig
2021-05-12 22:03 ` Sagi Grimberg
2021-05-12 22:12 ` Keith Busch
2021-05-14 2:50 ` Keith Busch
2021-05-14 16:26 ` Keith Busch
2021-05-14 16:28 ` Christoph Hellwig
2021-05-13 1:26 ` Ming Lei
2021-05-13 1:23 ` Ming Lei
2021-05-12 13:15 ` [PATCH 13/15] block: don't allow writing to the poll queue attribute Christoph Hellwig
2021-05-12 22:04 ` Sagi Grimberg
2021-05-12 13:15 ` [PATCH 14/15] nvme-multipath: set QUEUE_FLAG_NOWAIT Christoph Hellwig
2021-05-12 13:15 ` [PATCH 15/15] nvme-multipath: enable polled I/O Christoph Hellwig
2021-05-12 22:10 ` Sagi Grimberg
2021-05-12 22:16 ` Keith Busch
2021-05-13 23:33 ` switch block layer polling to a bio based model v3 Wunderlich, Mark
-- strict thread matches above, loose matches on Subject: below --
2021-04-27 16:16 switch block layer polling to a bio based model v2 Christoph Hellwig
2021-04-27 16:16 ` [PATCH 02/15] block: don't try to poll multi-bio I/Os in __blkdev_direct_IO Christoph Hellwig
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=CA+1E3r+8HrUymD-4Q06drqi_qV_L40OjgPCsw6C_Y6Gn_3FVSg@mail.gmail.com \
--to=joshiiitr@gmail.com \
--cc=Damien.LeMoal@wdc.com \
--cc=anil.vasudevan@intel.com \
--cc=axboe@kernel.dk \
--cc=hch@lst.de \
--cc=jefflexu@linux.alibaba.com \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=mark.wunderlich@intel.com \
--cc=ming.lei@redhat.com \
--cc=sagi@grimberg.me \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).