From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, stefanha@redhat.com, qemu-devel@nongnu.org
Subject: [PULL 30/58] block: remove all unused ->can_set_aio_ctx and ->set_aio_ctx callbacks
Date: Thu, 27 Oct 2022 20:31:18 +0200 [thread overview]
Message-ID: <20221027183146.463129-31-kwolf@redhat.com> (raw)
In-Reply-To: <20221027183146.463129-1-kwolf@redhat.com>
From: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Together with all _can_set_ and _set_ APIs, as they are not needed
anymore.
Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20221025084952.2139888-9-eesposit@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
include/block/block-global-state.h | 9 --
include/block/block_int-common.h | 4 -
block.c | 196 -----------------------------
block/block-backend.c | 33 -----
blockjob.c | 35 ------
5 files changed, 277 deletions(-)
diff --git a/include/block/block-global-state.h b/include/block/block-global-state.h
index e7372ec541..03d4ade7c2 100644
--- a/include/block/block-global-state.h
+++ b/include/block/block-global-state.h
@@ -220,18 +220,9 @@ void coroutine_fn bdrv_co_lock(BlockDriverState *bs);
*/
void coroutine_fn bdrv_co_unlock(BlockDriverState *bs);
-void bdrv_set_aio_context_ignore(BlockDriverState *bs,
- AioContext *new_context, GSList **ignore);
int bdrv_try_set_aio_context(BlockDriverState *bs, AioContext *ctx,
Error **errp);
-int bdrv_child_try_set_aio_context(BlockDriverState *bs, AioContext *ctx,
- BdrvChild *ignore_child, Error **errp);
-bool bdrv_child_can_set_aio_context(BdrvChild *c, AioContext *ctx,
- GSList **ignore, Error **errp);
-bool bdrv_can_set_aio_context(BlockDriverState *bs, AioContext *ctx,
- GSList **ignore, Error **errp);
AioContext *bdrv_child_get_parent_aio_context(BdrvChild *c);
-
bool bdrv_child_change_aio_context(BdrvChild *c, AioContext *ctx,
GHashTable *visited, Transaction *tran,
Error **errp);
diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h
index 7ccbbdae05..c756b838e8 100644
--- a/include/block/block_int-common.h
+++ b/include/block/block_int-common.h
@@ -906,10 +906,6 @@ struct BdrvChildClass {
int (*update_filename)(BdrvChild *child, BlockDriverState *new_base,
const char *filename, Error **errp);
- bool (*can_set_aio_ctx)(BdrvChild *child, AioContext *ctx,
- GSList **ignore, Error **errp);
- void (*set_aio_ctx)(BdrvChild *child, AioContext *ctx, GSList **ignore);
-
bool (*change_aio_ctx)(BdrvChild *child, AioContext *ctx,
GHashTable *visited, Transaction *tran,
Error **errp);
diff --git a/block.c b/block.c
index c35249e8c3..353240eecd 100644
--- a/block.c
+++ b/block.c
@@ -1250,20 +1250,6 @@ static bool bdrv_child_cb_change_aio_ctx(BdrvChild *child, AioContext *ctx,
return bdrv_change_aio_context(bs, ctx, visited, tran, errp);
}
-static bool bdrv_child_cb_can_set_aio_ctx(BdrvChild *child, AioContext *ctx,
- GSList **ignore, Error **errp)
-{
- BlockDriverState *bs = child->opaque;
- return bdrv_can_set_aio_context(bs, ctx, ignore, errp);
-}
-
-static void bdrv_child_cb_set_aio_ctx(BdrvChild *child, AioContext *ctx,
- GSList **ignore)
-{
- BlockDriverState *bs = child->opaque;
- return bdrv_set_aio_context_ignore(bs, ctx, ignore);
-}
-
/*
* Returns the options and flags that a temporary snapshot should get, based on
* the originally requested flags (the originally requested image will have
@@ -1540,8 +1526,6 @@ const BdrvChildClass child_of_bds = {
.attach = bdrv_child_cb_attach,
.detach = bdrv_child_cb_detach,
.inactivate = bdrv_child_cb_inactivate,
- .can_set_aio_ctx = bdrv_child_cb_can_set_aio_ctx,
- .set_aio_ctx = bdrv_child_cb_set_aio_ctx,
.change_aio_ctx = bdrv_child_cb_change_aio_ctx,
.update_filename = bdrv_child_cb_update_filename,
.get_parent_aio_context = child_of_bds_get_parent_aio_context,
@@ -7205,125 +7189,6 @@ static void bdrv_attach_aio_context(BlockDriverState *bs,
bs->walking_aio_notifiers = false;
}
-/*
- * Changes the AioContext used for fd handlers, timers, and BHs by this
- * BlockDriverState and all its children and parents.
- *
- * Must be called from the main AioContext.
- *
- * 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 objects. The caller is
- * responsible for freeing the list afterwards.
- */
-void bdrv_set_aio_context_ignore(BlockDriverState *bs,
- AioContext *new_context, GSList **ignore)
-{
- AioContext *old_context = bdrv_get_aio_context(bs);
- GSList *children_to_process = NULL;
- GSList *parents_to_process = NULL;
- GSList *entry;
- BdrvChild *child, *parent;
-
- g_assert(qemu_get_current_aio_context() == qemu_get_aio_context());
- GLOBAL_STATE_CODE();
-
- if (old_context == new_context) {
- return;
- }
-
- bdrv_drained_begin(bs);
-
- QLIST_FOREACH(child, &bs->children, next) {
- if (g_slist_find(*ignore, child)) {
- continue;
- }
- *ignore = g_slist_prepend(*ignore, child);
- children_to_process = g_slist_prepend(children_to_process, child);
- }
-
- QLIST_FOREACH(parent, &bs->parents, next_parent) {
- if (g_slist_find(*ignore, parent)) {
- continue;
- }
- *ignore = g_slist_prepend(*ignore, parent);
- parents_to_process = g_slist_prepend(parents_to_process, parent);
- }
-
- for (entry = children_to_process;
- entry != NULL;
- entry = g_slist_next(entry)) {
- child = entry->data;
- bdrv_set_aio_context_ignore(child->bs, new_context, ignore);
- }
- g_slist_free(children_to_process);
-
- for (entry = parents_to_process;
- entry != NULL;
- entry = g_slist_next(entry)) {
- parent = entry->data;
- assert(parent->klass->set_aio_ctx);
- parent->klass->set_aio_ctx(parent, new_context, ignore);
- }
- g_slist_free(parents_to_process);
-
- bdrv_detach_aio_context(bs);
-
- /* Acquire the new context, if necessary */
- if (qemu_get_aio_context() != new_context) {
- aio_context_acquire(new_context);
- }
-
- bdrv_attach_aio_context(bs, new_context);
-
- /*
- * If this function was recursively called from
- * bdrv_set_aio_context_ignore(), there may be nodes in the
- * subtree that have not yet been moved to the new AioContext.
- * Release the old one so bdrv_drained_end() can poll them.
- */
- if (qemu_get_aio_context() != old_context) {
- aio_context_release(old_context);
- }
-
- bdrv_drained_end(bs);
-
- if (qemu_get_aio_context() != old_context) {
- aio_context_acquire(old_context);
- }
- if (qemu_get_aio_context() != new_context) {
- aio_context_release(new_context);
- }
-}
-
-static bool bdrv_parent_can_set_aio_context(BdrvChild *c, AioContext *ctx,
- GSList **ignore, Error **errp)
-{
- GLOBAL_STATE_CODE();
- if (g_slist_find(*ignore, c)) {
- return true;
- }
- *ignore = g_slist_prepend(*ignore, c);
-
- /*
- * A BdrvChildClass that doesn't handle AioContext changes cannot
- * tolerate any AioContext changes
- */
- if (!c->klass->can_set_aio_ctx) {
- char *user = bdrv_child_user_desc(c);
- error_setg(errp, "Changing iothreads is not supported by %s", user);
- g_free(user);
- return false;
- }
- if (!c->klass->can_set_aio_ctx(c, ctx, ignore, errp)) {
- assert(!errp || *errp);
- return false;
- }
- return true;
-}
-
typedef struct BdrvStateSetAioContext {
AioContext *new_ctx;
BlockDriverState *bs;
@@ -7357,17 +7222,6 @@ static bool bdrv_parent_change_aio_context(BdrvChild *c, AioContext *ctx,
return true;
}
-bool bdrv_child_can_set_aio_context(BdrvChild *c, AioContext *ctx,
- GSList **ignore, Error **errp)
-{
- GLOBAL_STATE_CODE();
- if (g_slist_find(*ignore, c)) {
- return true;
- }
- *ignore = g_slist_prepend(*ignore, c);
- return bdrv_can_set_aio_context(c->bs, ctx, ignore, errp);
-}
-
bool bdrv_child_change_aio_context(BdrvChild *c, AioContext *ctx,
GHashTable *visited, Transaction *tran,
Error **errp)
@@ -7380,33 +7234,6 @@ bool bdrv_child_change_aio_context(BdrvChild *c, AioContext *ctx,
return bdrv_change_aio_context(c->bs, ctx, visited, tran, errp);
}
-/* @ignore will accumulate all visited BdrvChild object. The caller is
- * responsible for freeing the list afterwards. */
-bool bdrv_can_set_aio_context(BlockDriverState *bs, AioContext *ctx,
- GSList **ignore, Error **errp)
-{
- BdrvChild *c;
-
- if (bdrv_get_aio_context(bs) == ctx) {
- return true;
- }
-
- GLOBAL_STATE_CODE();
-
- QLIST_FOREACH(c, &bs->parents, next_parent) {
- if (!bdrv_parent_can_set_aio_context(c, ctx, ignore, errp)) {
- return false;
- }
- }
- QLIST_FOREACH(c, &bs->children, next) {
- if (!bdrv_child_can_set_aio_context(c, ctx, ignore, errp)) {
- return false;
- }
- }
-
- return true;
-}
-
static void bdrv_set_aio_context_clean(void *opaque)
{
BdrvStateSetAioContext *state = (BdrvStateSetAioContext *) opaque;
@@ -7499,29 +7326,6 @@ static bool bdrv_change_aio_context(BlockDriverState *bs, AioContext *ctx,
return true;
}
-int bdrv_child_try_set_aio_context(BlockDriverState *bs, AioContext *ctx,
- BdrvChild *ignore_child, Error **errp)
-{
- GSList *ignore;
- bool ret;
-
- GLOBAL_STATE_CODE();
-
- ignore = ignore_child ? g_slist_prepend(NULL, ignore_child) : NULL;
- ret = bdrv_can_set_aio_context(bs, ctx, &ignore, errp);
- g_slist_free(ignore);
-
- if (!ret) {
- return -EPERM;
- }
-
- ignore = ignore_child ? g_slist_prepend(NULL, ignore_child) : NULL;
- bdrv_set_aio_context_ignore(bs, ctx, &ignore);
- g_slist_free(ignore);
-
- return 0;
-}
-
/*
* Change bs's and recursively all of its parents' and children's AioContext
* to the given new context, returning an error if that isn't possible.
diff --git a/block/block-backend.c b/block/block-backend.c
index ff417dbff9..a91c8d3916 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -134,10 +134,6 @@ static void blk_root_drained_end(BdrvChild *child, int *drained_end_counter);
static void blk_root_change_media(BdrvChild *child, bool load);
static void blk_root_resize(BdrvChild *child);
-static bool blk_root_can_set_aio_ctx(BdrvChild *child, AioContext *ctx,
- GSList **ignore, Error **errp);
-static void blk_root_set_aio_ctx(BdrvChild *child, AioContext *ctx,
- GSList **ignore);
static bool blk_root_change_aio_ctx(BdrvChild *child, AioContext *ctx,
GHashTable *visited, Transaction *tran,
Error **errp);
@@ -337,8 +333,6 @@ static const BdrvChildClass child_root = {
.attach = blk_root_attach,
.detach = blk_root_detach,
- .can_set_aio_ctx = blk_root_can_set_aio_ctx,
- .set_aio_ctx = blk_root_set_aio_ctx,
.change_aio_ctx = blk_root_change_aio_ctx,
.get_parent_aio_context = blk_root_get_parent_aio_context,
@@ -2233,33 +2227,6 @@ static bool blk_root_change_aio_ctx(BdrvChild *child, AioContext *ctx,
return true;
}
-static bool blk_root_can_set_aio_ctx(BdrvChild *child, AioContext *ctx,
- GSList **ignore, Error **errp)
-{
- BlockBackend *blk = child->opaque;
-
- if (blk->allow_aio_context_change) {
- return true;
- }
-
- /* Only manually created BlockBackends that are not attached to anything
- * can change their AioContext without updating their user. */
- if (!blk->name || blk->dev) {
- /* TODO Add BB name/QOM path */
- error_setg(errp, "Cannot change iothread of active block backend");
- return false;
- }
-
- return true;
-}
-
-static void blk_root_set_aio_ctx(BdrvChild *child, AioContext *ctx,
- GSList **ignore)
-{
- BlockBackend *blk = child->opaque;
- blk_do_set_aio_context(blk, ctx, false, &error_abort);
-}
-
void blk_add_aio_context_notifier(BlockBackend *blk,
void (*attached_aio_context)(AioContext *new_context, void *opaque),
void (*detach_aio_context)(void *opaque), void *opaque)
diff --git a/blockjob.c b/blockjob.c
index 5a783b75c6..2d86014fa5 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -170,39 +170,6 @@ static bool child_job_change_aio_ctx(BdrvChild *c, AioContext *ctx,
return true;
}
-static bool child_job_can_set_aio_ctx(BdrvChild *c, AioContext *ctx,
- GSList **ignore, Error **errp)
-{
- BlockJob *job = c->opaque;
- GSList *l;
-
- for (l = job->nodes; l; l = l->next) {
- BdrvChild *sibling = l->data;
- if (!bdrv_child_can_set_aio_context(sibling, ctx, ignore, errp)) {
- return false;
- }
- }
- return true;
-}
-
-static void child_job_set_aio_ctx(BdrvChild *c, AioContext *ctx,
- GSList **ignore)
-{
- BlockJob *job = c->opaque;
- GSList *l;
-
- for (l = job->nodes; l; l = l->next) {
- BdrvChild *sibling = l->data;
- if (g_slist_find(*ignore, sibling)) {
- continue;
- }
- *ignore = g_slist_prepend(*ignore, sibling);
- bdrv_set_aio_context_ignore(sibling->bs, ctx, ignore);
- }
-
- job_set_aio_context(&job->job, ctx);
-}
-
static AioContext *child_job_get_parent_aio_context(BdrvChild *c)
{
BlockJob *job = c->opaque;
@@ -216,8 +183,6 @@ static const BdrvChildClass child_job = {
.drained_begin = child_job_drained_begin,
.drained_poll = child_job_drained_poll,
.drained_end = child_job_drained_end,
- .can_set_aio_ctx = child_job_can_set_aio_ctx,
- .set_aio_ctx = child_job_set_aio_ctx,
.change_aio_ctx = child_job_change_aio_ctx,
.stay_at_node = true,
.get_parent_aio_context = child_job_get_parent_aio_context,
--
2.37.3
next prev parent reply other threads:[~2022-10-27 19:27 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-27 18:30 [PULL 00/58] Block layer patches Kevin Wolf
2022-10-27 18:30 ` [PULL 01/58] MAINTAINERS: Fold "Block QAPI, monitor, ..." into "Block layer core" Kevin Wolf
2022-10-27 18:30 ` [PULL 02/58] block: Ignore close() failure in get_tmp_filename() Kevin Wolf
2022-10-27 18:30 ` [PULL 03/58] block: Refactor get_tmp_filename() Kevin Wolf
2022-10-27 18:30 ` [PULL 04/58] vvfat: allow some writes to bootsector Kevin Wolf
2022-10-27 18:30 ` [PULL 05/58] vvfat: allow spaces in file names Kevin Wolf
2022-10-27 18:30 ` [PULL 06/58] block/io_uring: revert "Use io_uring_register_ring_fd() to skip fd operations" Kevin Wolf
2022-10-27 18:30 ` [PULL 07/58] vhost-user-blk: fix the resize crash Kevin Wolf
2022-10-27 18:30 ` [PULL 08/58] block: BlockDriver: add .filtered_child_is_backing field Kevin Wolf
2022-10-27 18:30 ` [PULL 09/58] block: introduce bdrv_open_file_child() helper Kevin Wolf
2022-10-27 18:30 ` [PULL 10/58] block/blklogwrites: don't care to remove bs->file child on failure Kevin Wolf
2022-10-27 18:30 ` [PULL 11/58] test-bdrv-graph-mod: update test_parallel_perm_update test case Kevin Wolf
2022-10-27 18:31 ` [PULL 12/58] tests-bdrv-drain: bdrv_replace_test driver: declare supports_backing Kevin Wolf
2022-10-27 18:31 ` [PULL 13/58] test-bdrv-graph-mod: fix filters to be filters Kevin Wolf
2022-10-27 18:31 ` [PULL 14/58] block: document connection between child roles and bs->backing/bs->file Kevin Wolf
2022-10-27 18:31 ` [PULL 15/58] block/snapshot: stress that we fallback to primary child Kevin Wolf
2022-10-27 18:31 ` [PULL 16/58] Revert "block: Let replace_child_noperm free children" Kevin Wolf
2022-10-27 18:31 ` [PULL 17/58] Revert "block: Let replace_child_tran keep indirect pointer" Kevin Wolf
2022-10-27 18:31 ` [PULL 18/58] Revert "block: Restructure remove_file_or_backing_child()" Kevin Wolf
2022-10-27 18:31 ` [PULL 19/58] Revert "block: Pass BdrvChild ** to replace_child_noperm" Kevin Wolf
2022-10-27 18:31 ` [PULL 20/58] block: Manipulate bs->file / bs->backing pointers in .attach/.detach Kevin Wolf
2022-10-27 18:31 ` [PULL 21/58] block/snapshot: drop indirection around bdrv_snapshot_fallback_ptr Kevin Wolf
2022-10-27 18:31 ` [PULL 22/58] block: refactor bdrv_remove_file_or_backing_child to bdrv_remove_child Kevin Wolf
2022-10-27 18:31 ` [PULL 23/58] block.c: assert bs->aio_context is written under BQL and drains Kevin Wolf
2022-10-27 18:31 ` [PULL 24/58] block: use transactions as a replacement of ->{can_}set_aio_context() Kevin Wolf
2022-10-27 18:31 ` [PULL 25/58] bdrv_change_aio_context: use hash table instead of list of visited nodes Kevin Wolf
2022-10-27 18:31 ` [PULL 26/58] blockjob: implement .change_aio_ctx in child_job Kevin Wolf
2022-10-27 18:31 ` [PULL 27/58] block: implement .change_aio_ctx in child_of_bds Kevin Wolf
2022-10-27 18:31 ` [PULL 28/58] block-backend: implement .change_aio_ctx in child_root Kevin Wolf
2022-10-27 18:31 ` [PULL 29/58] block: use the new _change_ API instead of _can_set_ and _set_ Kevin Wolf
2022-10-27 18:31 ` Kevin Wolf [this message]
2022-10-27 18:31 ` [PULL 31/58] block: rename bdrv_child_try_change_aio_context in bdrv_try_change_aio_context Kevin Wolf
2022-10-27 18:31 ` [PULL 32/58] block: remove bdrv_try_set_aio_context and replace it with bdrv_try_change_aio_context Kevin Wolf
2022-10-27 18:31 ` [PULL 33/58] block/nfs: Fix 32-bit Windows build Kevin Wolf
2022-10-27 18:31 ` [PULL 34/58] backup: remove incorrect coroutine_fn annotation Kevin Wolf
2022-10-27 18:31 ` [PULL 35/58] block: " Kevin Wolf
2022-10-27 18:31 ` [PULL 36/58] monitor: add missing " Kevin Wolf
2022-10-27 18:31 ` [PULL 37/58] ssh: " Kevin Wolf
2022-10-27 18:31 ` [PULL 38/58] block: add missing coroutine_fn annotation to prototypes Kevin Wolf
2022-10-27 18:31 ` [PULL 39/58] coroutine-lock: " Kevin Wolf
2022-10-27 18:31 ` [PULL 40/58] coroutine-io: " Kevin Wolf
2022-10-27 18:31 ` [PULL 41/58] block: add missing coroutine_fn annotation to BlockDriverState callbacks Kevin Wolf
2022-10-27 18:31 ` [PULL 42/58] qcow2: add coroutine_fn annotation for indirect-called functions Kevin Wolf
2022-10-27 18:31 ` [PULL 43/58] blkdebug: add missing " Kevin Wolf
2022-10-27 18:31 ` [PULL 44/58] qcow: manually add more coroutine_fn annotations Kevin Wolf
2022-10-27 18:31 ` [PULL 45/58] qcow2: " Kevin Wolf
2022-10-27 18:31 ` [PULL 46/58] vmdk: " Kevin Wolf
2022-10-27 18:31 ` [PULL 47/58] commit: switch to *_co_* functions Kevin Wolf
2022-10-27 18:31 ` [PULL 48/58] block: " Kevin Wolf
2022-10-27 18:31 ` [PULL 49/58] mirror: " Kevin Wolf
2022-10-27 18:31 ` [PULL 50/58] parallels: " Kevin Wolf
2022-10-27 18:31 ` [PULL 51/58] qcow: " Kevin Wolf
2022-10-27 18:31 ` [PULL 52/58] qcow2: " Kevin Wolf
2022-10-27 18:31 ` [PULL 53/58] qed: " Kevin Wolf
2022-10-27 18:31 ` [PULL 54/58] vdi: " Kevin Wolf
2022-10-27 18:31 ` [PULL 55/58] vhdx: " Kevin Wolf
2022-10-27 18:31 ` [PULL 56/58] vmdk: " Kevin Wolf
2022-10-27 18:31 ` [PULL 57/58] monitor: " Kevin Wolf
2022-10-27 18:31 ` [PULL 58/58] block/block-backend: blk_set_enable_write_cache is IO_CODE Kevin Wolf
2022-10-30 19:16 ` [PULL 00/58] Block layer patches Stefan Hajnoczi
2022-10-31 10:13 ` Stefan Hajnoczi
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=20221027183146.463129-31-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@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.