From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com
Subject: [Qemu-devel] [PATCH 15/15] block: Remove bdrv_set_aio_context()
Date: Thu, 23 May 2019 18:01:04 +0200 [thread overview]
Message-ID: <20190523160104.21258-16-kwolf@redhat.com> (raw)
In-Reply-To: <20190523160104.21258-1-kwolf@redhat.com>
All callers of bdrv_set_aio_context() are eliminated now, they have
moved to bdrv_try_set_aio_context() and related safe functions. Remove
bdrv_set_aio_context().
With this, we can now know that the .set_aio_ctx callback must be
present in bdrv_set_aio_context_ignore() because
bdrv_can_set_aio_context() would have returned false previously, so
instead of checking the condition, we can assert it.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
docs/devel/multiple-iothreads.txt | 4 ++--
include/block/block.h | 9 ---------
block.c | 30 ++++++++++++++----------------
3 files changed, 16 insertions(+), 27 deletions(-)
diff --git a/docs/devel/multiple-iothreads.txt b/docs/devel/multiple-iothreads.txt
index 4f9012d154..aeb997bed5 100644
--- a/docs/devel/multiple-iothreads.txt
+++ b/docs/devel/multiple-iothreads.txt
@@ -109,7 +109,7 @@ The AioContext originates from the QEMU block layer, even though nowadays
AioContext is a generic event loop that can be used by any QEMU subsystem.
The block layer has support for AioContext integrated. Each BlockDriverState
-is associated with an AioContext using bdrv_set_aio_context() and
+is associated with an AioContext using bdrv_try_set_aio_context() and
bdrv_get_aio_context(). This allows block layer code to process I/O inside the
right AioContext. Other subsystems may wish to follow a similar approach.
@@ -134,5 +134,5 @@ Long-running jobs (usually in the form of coroutines) are best scheduled in
the BlockDriverState's AioContext to avoid the need to acquire/release around
each bdrv_*() call. The functions bdrv_add/remove_aio_context_notifier,
or alternatively blk_add/remove_aio_context_notifier if you use BlockBackends,
-can be used to get a notification whenever bdrv_set_aio_context() moves a
+can be used to get a notification whenever bdrv_try_set_aio_context() moves a
BlockDriverState to a different AioContext.
diff --git a/include/block/block.h b/include/block/block.h
index 531cf595cf..13ea050a5b 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -583,15 +583,6 @@ AioContext *bdrv_get_aio_context(BlockDriverState *bs);
*/
void bdrv_coroutine_enter(BlockDriverState *bs, Coroutine *co);
-/**
- * bdrv_set_aio_context:
- *
- * Changes the #AioContext used for fd handlers, timers, and BHs by this
- * BlockDriverState and all its children.
- *
- * This function must be called with iothread lock held.
- */
-void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context);
void bdrv_set_aio_context_ignore(BlockDriverState *bs,
AioContext *new_context, GSList **ignore);
int bdrv_try_set_aio_context(BlockDriverState *bs, AioContext *ctx,
diff --git a/block.c b/block.c
index e9261c650d..628f65c41a 100644
--- a/block.c
+++ b/block.c
@@ -5791,8 +5791,17 @@ static void bdrv_attach_aio_context(BlockDriverState *bs,
bs->walking_aio_notifiers = false;
}
-/* @ignore will accumulate all visited BdrvChild object. The caller is
- * responsible for freeing the list afterwards. */
+/*
+ * Changes the AioContext used for fd handlers, timers, and BHs by this
+ * BlockDriverState and all its children and parents.
+ *
+ * The caller must own the AioContext lock for the old AioContext of bs, but it
+ * must not own the AioContext lock for new_context (unless new_context is the
+ * same as the current context of bs).
+ *
+ * @ignore will accumulate all visited BdrvChild object. The caller is
+ * responsible for freeing the list afterwards.
+ */
void bdrv_set_aio_context_ignore(BlockDriverState *bs,
AioContext *new_context, GSList **ignore)
{
@@ -5815,10 +5824,9 @@ void bdrv_set_aio_context_ignore(BlockDriverState *bs,
if (g_slist_find(*ignore, child)) {
continue;
}
- if (child->role->set_aio_ctx) {
- *ignore = g_slist_prepend(*ignore, child);
- child->role->set_aio_ctx(child, new_context, ignore);
- }
+ assert(child->role->set_aio_ctx);
+ *ignore = g_slist_prepend(*ignore, child);
+ child->role->set_aio_ctx(child, new_context, ignore);
}
bdrv_detach_aio_context(bs);
@@ -5832,16 +5840,6 @@ void bdrv_set_aio_context_ignore(BlockDriverState *bs,
aio_context_release(new_context);
}
-/* The caller must own the AioContext lock for the old AioContext of bs, but it
- * must not own the AioContext lock for new_context (unless new_context is
- * the same as the current context of bs). */
-void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
-{
- GSList *ignore_list = NULL;
- bdrv_set_aio_context_ignore(bs, new_context, &ignore_list);
- g_slist_free(ignore_list);
-}
-
static bool bdrv_parent_can_set_aio_context(BdrvChild *c, AioContext *ctx,
GSList **ignore, Error **errp)
{
--
2.20.1
next prev parent reply other threads:[~2019-05-23 16:15 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-23 16:00 [Qemu-devel] [PATCH 00/15] block: AioContext management, part 2 Kevin Wolf
2019-05-23 16:00 ` [Qemu-devel] [PATCH 01/15] test-block-iothread: Check filter node in test_propagate_mirror Kevin Wolf
2019-05-24 12:25 ` Eric Blake
2019-05-23 16:00 ` [Qemu-devel] [PATCH 02/15] block: Add Error to blk_set_aio_context() Kevin Wolf
2019-05-23 16:00 ` [Qemu-devel] [PATCH 03/15] block: Add BlockBackend.ctx Kevin Wolf
2019-05-23 16:00 ` [Qemu-devel] [PATCH 04/15] block: Add qdev_prop_drive_iothread property type Kevin Wolf
2019-05-23 16:00 ` [Qemu-devel] [PATCH 05/15] scsi-disk: Use qdev_prop_drive_iothread Kevin Wolf
2019-05-23 16:00 ` [Qemu-devel] [PATCH 06/15] block: Adjust AioContexts when attaching nodes Kevin Wolf
2019-05-23 16:00 ` [Qemu-devel] [PATCH 07/15] test-block-iothread: Test adding parent to iothread node Kevin Wolf
2019-05-24 12:24 ` Eric Blake
2019-05-23 16:00 ` [Qemu-devel] [PATCH 08/15] test-block-iothread: BlockBackend AioContext across root node change Kevin Wolf
2019-05-23 16:00 ` [Qemu-devel] [PATCH 09/15] block: Move node without parents to main AioContext Kevin Wolf
2019-05-23 16:00 ` [Qemu-devel] [PATCH 10/15] blockdev: Use bdrv_try_set_aio_context() for monitor commands Kevin Wolf
2019-05-23 16:01 ` [Qemu-devel] [PATCH 11/15] block: Remove wrong bdrv_set_aio_context() calls Kevin Wolf
2019-05-23 16:01 ` [Qemu-devel] [PATCH 12/15] virtio-scsi-test: Test attaching new overlay with iothreads Kevin Wolf
2019-05-23 16:01 ` [Qemu-devel] [PATCH 13/15] iotests: Attach new devices to node in non-default iothread Kevin Wolf
2019-05-23 16:01 ` [Qemu-devel] [PATCH 14/15] test-bdrv-drain: Use bdrv_try_set_aio_context() Kevin Wolf
2019-05-23 16:01 ` Kevin Wolf [this message]
2019-05-23 19:44 ` [Qemu-devel] [PATCH 00/15] block: AioContext management, part 2 no-reply
2019-05-24 8:57 ` [Qemu-devel] [PATCH 1.5/15] nbd-server: Call blk_set_allow_aio_context_change() Kevin Wolf
2019-05-24 12:27 ` Eric Blake
2019-06-03 13:19 ` [Qemu-devel] [PATCH 00/15] block: AioContext management, part 2 Kevin Wolf
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=20190523160104.21258-16-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.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 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).