Re: [Qemu-devel] [PATCH 5/6] block: reopen: Queue children after their parents

2017-09-15 Thread Eric Blake
On 09/15/2017 05:10 AM, Kevin Wolf wrote:
> We will calculate the required new permissions in the prepare stage of a
> reopen. Required permissions of children can be influenced by the
> changes made to their parents, but parents are independent from their
> children. This means that permissions need to be calculated top-down. In
> order to achieve this, queue parents before their children rather than
> queuing the children first.
> 
> Signed-off-by: Kevin Wolf 
> ---
>  block.c | 26 +-
>  1 file changed, 13 insertions(+), 13 deletions(-)
> 

Reviewed-by: Eric Blake 

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.   +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



signature.asc
Description: OpenPGP digital signature


[Qemu-devel] [PATCH 5/6] block: reopen: Queue children after their parents

2017-09-15 Thread Kevin Wolf
We will calculate the required new permissions in the prepare stage of a
reopen. Required permissions of children can be influenced by the
changes made to their parents, but parents are independent from their
children. This means that permissions need to be calculated top-down. In
order to achieve this, queue parents before their children rather than
queuing the children first.

Signed-off-by: Kevin Wolf 
---
 block.c | 26 +-
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/block.c b/block.c
index ed8d51dd42..204cbb46c7 100644
--- a/block.c
+++ b/block.c
@@ -2768,6 +2768,19 @@ static BlockReopenQueue 
*bdrv_reopen_queue_child(BlockReopenQueue *bs_queue,
 flags |= BDRV_O_ALLOW_RDWR;
 }
 
+if (!bs_entry) {
+bs_entry = g_new0(BlockReopenQueueEntry, 1);
+QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
+} else {
+QDECREF(bs_entry->state.options);
+QDECREF(bs_entry->state.explicit_options);
+}
+
+bs_entry->state.bs = bs;
+bs_entry->state.options = options;
+bs_entry->state.explicit_options = explicit_options;
+bs_entry->state.flags = flags;
+
 QLIST_FOREACH(child, >children, next) {
 QDict *new_child_options;
 char *child_key_dot;
@@ -2787,19 +2800,6 @@ static BlockReopenQueue 
*bdrv_reopen_queue_child(BlockReopenQueue *bs_queue,
 child->role, options, flags);
 }
 
-if (!bs_entry) {
-bs_entry = g_new0(BlockReopenQueueEntry, 1);
-QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
-} else {
-QDECREF(bs_entry->state.options);
-QDECREF(bs_entry->state.explicit_options);
-}
-
-bs_entry->state.bs = bs;
-bs_entry->state.options = options;
-bs_entry->state.explicit_options = explicit_options;
-bs_entry->state.flags = flags;
-
 return bs_queue;
 }
 
-- 
2.13.5