diff options
author | Fiona Ebner <f.ebner@proxmox.com> | 2025-05-30 17:11:02 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2025-07-14 15:41:34 +0200 |
commit | 9918b2e95ed55680e5b2016149dd51610c698611 (patch) | |
tree | 177693af574876817c99e72734d59ff9ad30b3de | |
parent | 6b89e851fabf78d7fb090bcdc71789ea1ef55c9b (diff) | |
download | qemu-9918b2e95ed55680e5b2016149dd51610c698611.zip qemu-9918b2e95ed55680e5b2016149dd51610c698611.tar.gz qemu-9918b2e95ed55680e5b2016149dd51610c698611.tar.bz2 |
block/mirror: switch to bdrv_set_backing_hd_drained() variant
This is in preparation to mark bdrv_set_backing_hd() as
GRAPH_UNLOCKED.
Switch to using the bdrv_set_backing_hd_drained() variant, so that the
drained and locked section can also cover the calls to
bdrv_skip_filters() and bdrv_cow_bs().
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
Message-ID: <20250530151125.955508-26-f.ebner@proxmox.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r-- | block/mirror.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/block/mirror.c b/block/mirror.c index 82a6e50..873e95d 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -761,30 +761,36 @@ static int mirror_exit_common(Job *job) bdrv_graph_rdlock_main_loop(); bdrv_child_refresh_perms(mirror_top_bs, mirror_top_bs->backing, &error_abort); + bdrv_graph_rdunlock_main_loop(); if (!abort && s->backing_mode == MIRROR_SOURCE_BACKING_CHAIN) { BlockDriverState *backing; - BlockDriverState *unfiltered_target = bdrv_skip_filters(target_bs); + BlockDriverState *unfiltered_target; + + bdrv_graph_wrlock_drained(); + unfiltered_target = bdrv_skip_filters(target_bs); backing = s->sync_mode == MIRROR_SYNC_MODE_NONE ? src : s->base; if (bdrv_cow_bs(unfiltered_target) != backing) { - bdrv_set_backing_hd(unfiltered_target, backing, &local_err); + bdrv_set_backing_hd_drained(unfiltered_target, backing, &local_err); if (local_err) { error_report_err(local_err); local_err = NULL; ret = -EPERM; } } + bdrv_graph_wrunlock(); } else if (!abort && s->backing_mode == MIRROR_OPEN_BACKING_CHAIN) { + bdrv_graph_rdlock_main_loop(); assert(!bdrv_backing_chain_next(target_bs)); ret = bdrv_open_backing_file(bdrv_skip_filters(target_bs), NULL, "backing", &local_err); + bdrv_graph_rdunlock_main_loop(); if (ret < 0) { error_report_err(local_err); local_err = NULL; } } - bdrv_graph_rdunlock_main_loop(); if (s->should_complete && !abort) { BlockDriverState *to_replace = s->to_replace ?: src; |