[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v3 23/44] block: Add BdrvChildRole.stay_at_node
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PATCH v3 23/44] block: Add BdrvChildRole.stay_at_node |
Date: |
Tue, 28 Feb 2017 13:54:08 +0100 |
When the parents' child links are updated in bdrv_append() or
bdrv_replace_in_backing_chain(), this should affect all child links of
BlockBackends or other nodes, but not on child links held for other
purposes (like for setting permissions). This patch allows to control
the behaviour per BdrvChildRole.
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
---
block.c | 3 +++
include/block/block_int.h | 4 ++++
2 files changed, 7 insertions(+)
diff --git a/block.c b/block.c
index f72a67f..9e538a5 100644
--- a/block.c
+++ b/block.c
@@ -2853,6 +2853,9 @@ static void change_parent_backing_link(BlockDriverState
*from,
BdrvChild *c, *next, *to_c;
QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) {
+ if (c->role->stay_at_node) {
+ continue;
+ }
if (c->role == &child_backing) {
/* @from is generally not allowed to be a backing file, except for
* when @to is the overlay. In that case, @from may not be replaced
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 3177b9f..a0d9328 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -441,6 +441,10 @@ typedef struct BdrvAioNotifier {
} BdrvAioNotifier;
struct BdrvChildRole {
+ /* If true, bdrv_replace_in_backing_chain() doesn't change the node this
+ * BdrvChild points to. */
+ bool stay_at_node;
+
void (*inherit_options)(int *child_flags, QDict *child_options,
int parent_flags, QDict *parent_options);
--
1.8.3.1
- Re: [Qemu-block] [PATCH v3 15/44] block: Add BDRV_O_RESIZE for blk_new_open(), (continued)
- [Qemu-block] [PATCH v3 16/44] block: Request real permissions in blk_new_open(), Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 18/44] hw/block: Request permissions, Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 17/44] block: Allow error return in BlockDevOps.change_media_cb(), Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 19/44] hw/block: Introduce share-rw qdev property, Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 21/44] block: Add BdrvChildRole.get_parent_desc(), Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 22/44] block: Include details on permission errors in message, Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 20/44] blockjob: Add permissions to block_job_create(), Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 23/44] block: Add BdrvChildRole.stay_at_node,
Kevin Wolf <=
- [Qemu-block] [PATCH v3 24/44] blockjob: Add permissions to block_job_add_bdrv(), Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 26/44] commit: Use real permissions for HMP 'commit', Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 25/44] commit: Use real permissions in commit block job, Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 27/44] backup: Use real permissions in backup block job, Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 28/44] block: Fix pending requests check in bdrv_append(), Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 29/44] block: BdrvChildRole.attach/detach() callbacks, Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 30/44] block: Allow backing file links in change_parent_backing_link(), Kevin Wolf, 2017/02/28
- [Qemu-block] [PATCH v3 31/44] blockjob: Factor out block_job_remove_all_bdrv(), Kevin Wolf, 2017/02/28