From: Kevin Wolf <kwolf@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Cc: qemu-block@nongnu.org, eesposit@redhat.com, stefanha@redhat.com,
hreitz@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org
Subject: Re: [PATCH 06/13] block: Drain invidual nodes during reopen
Date: Fri, 11 Nov 2022 17:54:24 +0100 [thread overview]
Message-ID: <Y259Avl8KeoGyB2e@redhat.com> (raw)
In-Reply-To: <18167aa9-e9e6-ea2c-ad96-68a7c972a371@yandex-team.ru>
Am 09.11.2022 um 17:00 hat Vladimir Sementsov-Ogievskiy geschrieben:
> In subject: individual
>
> On 11/8/22 15:37, Kevin Wolf wrote:
> > bdrv_reopen() and friends use subtree drains as a lazy way of covering
> > all the nodes they touch. Turns out that this lazy way is a lot more
> > complicated than just draining the nodes individually, even not
> > accounting for the additional complexity in the drain mechanism itself.
> >
> > Simplify the code by switching to draining the individual nodes that are
> > already managed in the BlockReopenQueue anyway.
> >
> > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > ---
> > block.c | 11 ++++-------
> > block/replication.c | 6 ------
> > blockdev.c | 13 -------------
> > 3 files changed, 4 insertions(+), 26 deletions(-)
> >
>
> [..]
>
> > bdrv_reopen_queue_free(queue);
> > - for (p = drained; p; p = p->next) {
> > - BlockDriverState *bs = p->data;
> > - AioContext *ctx = bdrv_get_aio_context(bs);
> > -
> > - aio_context_acquire(ctx);
>
> In bdrv_reopen_queue_free() we don't have this acquire()/release()
> pair around bdrv_drained_end(). We don't need it anymore?
Good catch, I think we do.
Reopen is a bit messy with AioContext locks. I think the rule is
supposed to be that bdrv_reopen_queue() requires that the lock for
bs->aio_context is held, and bdrv_reopen_multiple() requires that no
AioContext lock is held, right?
Because the former is not actually true: qmp_blockdev_reopen() and the
'replication' block driver do indeed take the lock, but bdrv_reopen()
drops it for both functions!
So I think we also need an additional fix for bdrv_reopen() to drop the
lock only after calling bdrv_reopen_queue(). It may not have made a
difference before, but now that we call bdrv_drained_begin() in it, it
seems important.
Kevin
next prev parent reply other threads:[~2022-11-11 16:55 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-08 12:37 [PATCH 00/13] block: Simplify drain Kevin Wolf
2022-11-08 12:37 ` [PATCH 01/13] qed: Don't yield in bdrv_qed_co_drain_begin() Kevin Wolf
2022-11-09 9:21 ` Vladimir Sementsov-Ogievskiy
2022-11-09 9:27 ` Vladimir Sementsov-Ogievskiy
2022-11-09 12:22 ` Kevin Wolf
2022-11-09 21:49 ` Stefan Hajnoczi
2022-11-10 11:07 ` Kevin Wolf
2022-11-11 11:14 ` Emanuele Giuseppe Esposito
2022-11-14 18:16 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 02/13] test-bdrv-drain: Don't yield in .bdrv_co_drained_begin/end() Kevin Wolf
2022-11-09 10:50 ` Vladimir Sementsov-Ogievskiy
2022-11-09 12:28 ` Kevin Wolf
2022-11-09 13:45 ` Vladimir Sementsov-Ogievskiy
2022-11-11 11:14 ` Emanuele Giuseppe Esposito
2022-11-14 18:16 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 03/13] block: Revert .bdrv_drained_begin/end to non-coroutine_fn Kevin Wolf
2022-11-09 14:29 ` Vladimir Sementsov-Ogievskiy
2022-11-09 22:13 ` Stefan Hajnoczi
2022-11-11 11:14 ` Emanuele Giuseppe Esposito
2022-11-14 18:17 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 04/13] block: Remove drained_end_counter Kevin Wolf
2022-11-09 14:44 ` Vladimir Sementsov-Ogievskiy
2022-11-11 16:37 ` Kevin Wolf
2022-11-11 11:15 ` Emanuele Giuseppe Esposito
2022-11-14 18:19 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 05/13] block: Inline bdrv_drain_invoke() Kevin Wolf
2022-11-09 15:34 ` Vladimir Sementsov-Ogievskiy
2022-11-10 19:48 ` Stefan Hajnoczi
2022-11-11 11:15 ` Emanuele Giuseppe Esposito
2022-11-14 18:19 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 06/13] block: Drain invidual nodes during reopen Kevin Wolf
2022-11-09 16:00 ` Vladimir Sementsov-Ogievskiy
2022-11-11 16:54 ` Kevin Wolf [this message]
2022-11-08 12:37 ` [PATCH 07/13] block: Don't use subtree drains in bdrv_drop_intermediate() Kevin Wolf
2022-11-09 16:18 ` Vladimir Sementsov-Ogievskiy
2022-11-14 18:20 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 08/13] stream: Replace subtree drain with a single node drain Kevin Wolf
2022-11-09 16:52 ` Vladimir Sementsov-Ogievskiy
2022-11-10 10:16 ` Kevin Wolf
2022-11-10 11:25 ` Vladimir Sementsov-Ogievskiy
2022-11-10 17:27 ` Kevin Wolf
2022-11-14 18:21 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 09/13] block: Remove subtree drains Kevin Wolf
2022-11-09 17:22 ` Vladimir Sementsov-Ogievskiy
2022-11-14 18:22 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 10/13] block: Call drain callbacks only once Kevin Wolf
2022-11-09 18:05 ` Vladimir Sementsov-Ogievskiy
2022-11-14 12:32 ` Kevin Wolf
2022-11-09 18:54 ` Vladimir Sementsov-Ogievskiy
2022-11-14 18:23 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 11/13] block: Remove ignore_bds_parents parameter from drain functions Kevin Wolf
2022-11-09 18:57 ` Vladimir Sementsov-Ogievskiy
2022-11-14 18:23 ` Hanna Reitz
2022-11-08 12:37 ` [PATCH 12/13] block: Don't poll in bdrv_replace_child_noperm() Kevin Wolf
2022-11-11 11:21 ` Emanuele Giuseppe Esposito
2022-11-14 20:22 ` Hanna Reitz
2022-11-17 13:27 ` Kevin Wolf
2022-11-08 12:37 ` [PATCH 13/13] block: Remove poll parameter from bdrv_parent_drained_begin_single() Kevin Wolf
2022-11-14 20:24 ` Hanna Reitz
2022-11-10 20:13 ` [PATCH 00/13] block: Simplify drain Stefan Hajnoczi
2022-11-11 11:23 ` Emanuele Giuseppe Esposito
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=Y259Avl8KeoGyB2e@redhat.com \
--to=kwolf@redhat.com \
--cc=eesposit@redhat.com \
--cc=hreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@yandex-team.ru \
/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).