From: Kevin Wolf <kwolf@redhat.com>
To: Hanna Czenczek <hreitz@redhat.com>
Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org,
qemu-stable@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>, Fam Zheng <fam@euphon.net>
Subject: Re: [PATCH 0/2] block: Allow concurrent BB context changes
Date: Wed, 7 Feb 2024 14:55:59 +0100 [thread overview]
Message-ID: <ZcOL725H_pkewVLM@redhat.com> (raw)
In-Reply-To: <20240202144755.671354-1-hreitz@redhat.com>
Am 02.02.2024 um 15:47 hat Hanna Czenczek geschrieben:
> Hi,
>
> Without the AioContext lock, a BB's context may kind of change at any
> time (unless it has a root node, and I/O requests are pending). That
> also means that its own context (BlockBackend.ctx) and that of its root
> node can differ sometimes (while the context is being changed).
>
> blk_get_aio_context() doesn't know this yet and asserts that both are
> always equal (if there is a root node). Because it's no longer true,
> and because callers don't seem to really care about the root node's
> context, we can and should remove the assertion and just return the BB's
> context.
>
> Beyond that, the question is whether the callers of
> blk_get_aio_context() are OK with the context potentially changing
> concurrently. Honestly, it isn't entirely clear to me; most look OK,
> except for the virtio-scsi code, which operates under the general
> assumption that the BB's context is always equal to that of the
> virtio-scsi device. I doubt that this assumption always holds (it is
> definitely not obvious to me that it would), but then again, this series
> will not make matters worse in that regard, and that is what counts for
> me now.
>
> One clear point of contention is scsi_device_for_each_req_async(), which
> is addressed by patch 2. Right now, it schedules a BH in the BB
> context, then the BH double-checks whether the context still fits, and
> if not, re-schedules itself. Because virtio-scsi's context is fixed,
> this seems to indicate to me that it wants to be able to deal with a
> case where BB and virtio-scsi context differ, which seems to break that
> aforementioned general virtio-scsi assumption.
>
> Unfortunately, I definitely have to touch that code, because accepting
> concurrent changes of AioContexts breaks the double-check (just because
> the BB has the right context in that place does not mean it stays in
> that context); instead, we must prevent any concurrent change until the
> BH is done. Because changing contexts generally involves a drained
> section, we can prevent it by keeping the BB in-flight counter elevated.
>
> Question is, how to reason for that. I’d really rather not include the
> need to follow the BB context in my argument, because I find that part a
> bit fishy.
>
> Luckily, there’s a second, completely different reason for having
> scsi_device_for_each_req_async() increment the in-flight counter:
> Specifically, scsi_device_purge_requests() probably wants to await full
> completion of scsi_device_for_each_req_async(), and we can do that most
> easily in the very same way by incrementing the in-flight counter. This
> way, the blk_drain() in scsi_device_purge_requests() will not only await
> all (cancelled) I/O requests, but also the non-I/O requests.
>
> The fact that this prevents the BB AioContext from changing while the BH
> is scheduled/running then is just a nice side effect.
>
>
> Hanna Czenczek (2):
> block-backend: Allow concurrent context changes
> scsi: Await request purging
>
> block/block-backend.c | 22 +++++++++++-----------
> hw/scsi/scsi-bus.c | 30 +++++++++++++++++++++---------
> 2 files changed, 32 insertions(+), 20 deletions(-)
Thanks, applied to the block branch.
Kevin
next prev parent reply other threads:[~2024-02-07 13:56 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-02 14:47 [PATCH 0/2] block: Allow concurrent BB context changes Hanna Czenczek
2024-02-02 14:47 ` [PATCH 1/2] block-backend: Allow concurrent " Hanna Czenczek
2024-02-06 16:55 ` Stefan Hajnoczi
2024-02-02 14:47 ` [PATCH 2/2] scsi: Await request purging Hanna Czenczek
2024-02-06 16:56 ` Stefan Hajnoczi
2024-02-06 16:53 ` [PATCH 0/2] block: Allow concurrent BB context changes Stefan Hajnoczi
2024-02-07 9:35 ` Hanna Czenczek
2024-02-08 21:15 ` Stefan Hajnoczi
2024-02-07 13:55 ` Kevin Wolf [this message]
2024-02-09 14:08 ` Michael Tokarev
2024-02-09 16:51 ` Hanna Czenczek
2024-02-10 8:46 ` Michael Tokarev
2024-02-12 8:52 ` Hanna Czenczek
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=ZcOL725H_pkewVLM@redhat.com \
--to=kwolf@redhat.com \
--cc=fam@euphon.net \
--cc=hreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-stable@nongnu.org \
--cc=stefanha@redhat.com \
/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.