[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v8 2/7] block: swap operation order in bdrv_append
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[Qemu-devel] [PATCH v8 2/7] block: swap operation order in bdrv_append |
Date: |
Wed, 29 May 2019 18:46:49 +0300 |
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 <address@hidden>
---
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
- [Qemu-devel] [PATCH v8 0/7] backup-top filter driver for backup, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 3/7] block: allow not one child for implicit node, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 6/7] block: add lock/unlock range functions, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 5/7] block/io: refactor wait_serialising_requests, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 2/7] block: swap operation order in bdrv_append,
Vladimir Sementsov-Ogievskiy <=
- [Qemu-devel] [PATCH v8 1/7] block: teach bdrv_debug_breakpoint skip filters with backing, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 4/7] block: introduce backup-top filter driver, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 7/7] block/backup: use backup-top instead of write notifiers, Vladimir Sementsov-Ogievskiy, 2019/05/29
- Re: [Qemu-devel] [PATCH v8 0/7] backup-top filter driver for backup, Vladimir Sementsov-Ogievskiy, 2019/05/30