From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: qemu-devel@nongnu.org, qemu-block@nongnu.org
Cc: fam@euphon.net, kwolf@redhat.com, vsementsov@virtuozzo.com,
mreitz@redhat.com, stefanha@redhat.com, den@openvz.org,
jsnow@redhat.com
Subject: [Qemu-devel] [PATCH v8 2/7] block: swap operation order in bdrv_append
Date: Wed, 29 May 2019 18:46:49 +0300 [thread overview]
Message-ID: <20190529154654.95870-3-vsementsov@virtuozzo.com> (raw)
In-Reply-To: <20190529154654.95870-1-vsementsov@virtuozzo.com>
bs_top parents may conflict with bs_new backing child permissions, so
let's do bdrv_replace_node first, it covers more possible cases.
It is needed for further implementation of backup-top filter, which
don't want to share write permission on its backing child.
Side effect is that we may set backing hd when device name is already
available, so 085 iotest output is changed.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block.c | 11 ++++++++---
tests/qemu-iotests/085.out | 2 +-
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/block.c b/block.c
index e6e9770704..57216f4115 100644
--- a/block.c
+++ b/block.c
@@ -4088,22 +4088,27 @@ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top,
{
Error *local_err = NULL;
- bdrv_set_backing_hd(bs_new, bs_top, &local_err);
+ bdrv_ref(bs_top);
+
+ bdrv_replace_node(bs_top, bs_new, &local_err);
if (local_err) {
error_propagate(errp, local_err);
+ error_prepend(errp, "Failed to replace node: ");
goto out;
}
- bdrv_replace_node(bs_top, bs_new, &local_err);
+ bdrv_set_backing_hd(bs_new, bs_top, &local_err);
if (local_err) {
+ bdrv_replace_node(bs_new, bs_top, &error_abort);
error_propagate(errp, local_err);
- bdrv_set_backing_hd(bs_new, NULL, &error_abort);
+ error_prepend(errp, "Failed to set backing: ");
goto out;
}
/* bs_new is now referenced by its new parents, we don't need the
* additional reference any more. */
out:
+ bdrv_unref(bs_top);
bdrv_unref(bs_new);
}
diff --git a/tests/qemu-iotests/085.out b/tests/qemu-iotests/085.out
index 6edf107f55..e5a2645bf5 100644
--- a/tests/qemu-iotests/085.out
+++ b/tests/qemu-iotests/085.out
@@ -74,7 +74,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/
=== Invalid command - snapshot node used as backing hd ===
-{"error": {"class": "GenericError", "desc": "Node 'snap_11' is busy: node is used as backing hd of 'snap_12'"}}
+{"error": {"class": "GenericError", "desc": "Node 'snap_11' is busy: node is used as backing hd of 'virtio0'"}}
=== Invalid command - snapshot node has a backing image ===
--
2.18.0
next prev parent reply other threads:[~2019-05-29 15:49 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-29 15:46 [Qemu-devel] [PATCH v8 0/7] backup-top filter driver for backup Vladimir Sementsov-Ogievskiy
2019-05-29 15:46 ` [Qemu-devel] [PATCH v8 1/7] block: teach bdrv_debug_breakpoint skip filters with backing Vladimir Sementsov-Ogievskiy
2019-06-13 13:43 ` Max Reitz
2019-05-29 15:46 ` Vladimir Sementsov-Ogievskiy [this message]
2019-06-13 13:45 ` [Qemu-devel] [PATCH v8 2/7] block: swap operation order in bdrv_append Max Reitz
2019-06-13 14:02 ` Vladimir Sementsov-Ogievskiy
2019-05-29 15:46 ` [Qemu-devel] [PATCH v8 3/7] block: allow not one child for implicit node Vladimir Sementsov-Ogievskiy
2019-06-13 13:51 ` Max Reitz
2019-05-29 15:46 ` [Qemu-devel] [PATCH v8 4/7] block: introduce backup-top filter driver Vladimir Sementsov-Ogievskiy
2019-06-13 15:57 ` Max Reitz
2019-06-14 9:04 ` Vladimir Sementsov-Ogievskiy
2019-06-14 12:57 ` Max Reitz
2019-06-14 16:22 ` Vladimir Sementsov-Ogievskiy
2019-06-14 20:03 ` Max Reitz
2019-06-17 10:36 ` Vladimir Sementsov-Ogievskiy
2019-06-17 14:56 ` Max Reitz
2019-06-17 15:53 ` Kevin Wolf
2019-06-17 16:01 ` Max Reitz
2019-06-17 16:25 ` Kevin Wolf
2019-06-18 7:19 ` Vladimir Sementsov-Ogievskiy
2019-06-18 8:20 ` Kevin Wolf
2019-06-18 8:29 ` Vladimir Sementsov-Ogievskiy
2019-06-18 7:25 ` Vladimir Sementsov-Ogievskiy
2019-05-29 15:46 ` [Qemu-devel] [PATCH v8 5/7] block/io: refactor wait_serialising_requests Vladimir Sementsov-Ogievskiy
2019-05-29 15:46 ` [Qemu-devel] [PATCH v8 6/7] block: add lock/unlock range functions Vladimir Sementsov-Ogievskiy
2019-06-13 16:31 ` Max Reitz
2019-05-29 15:46 ` [Qemu-devel] [PATCH v8 7/7] block/backup: use backup-top instead of write notifiers Vladimir Sementsov-Ogievskiy
2019-06-13 18:02 ` Max Reitz
2019-06-14 9:14 ` Vladimir Sementsov-Ogievskiy
2019-05-30 13:25 ` [Qemu-devel] [PATCH v8 0/7] backup-top filter driver for backup Vladimir Sementsov-Ogievskiy
2019-06-13 16:08 ` no-reply
2019-06-13 16:41 ` no-reply
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=20190529154654.95870-3-vsementsov@virtuozzo.com \
--to=vsementsov@virtuozzo.com \
--cc=den@openvz.org \
--cc=fam@euphon.net \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@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 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).