qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] block: Ensure correct order when dropping intermedi


From: Alberto Garcia
Subject: [Qemu-devel] [PATCH] block: Ensure correct order when dropping intermediate images
Date: Fri, 27 Feb 2015 10:13:49 +0200

Given a chain of images like [A] <- [B] <- [C] <- [D] <- [E], where
[E] is the active (topmost) image, if we want to remove [B] and [C] we
have to do it before linking [A] and [D].

When [A] is set as the backing image of [D] all its operations are
blocked, but removing [B] afterwards would undo those changes, since
[B] would still be connected to [A].

This would result in a situation where the backing image [A] has all
its operations unblocked.

Signed-off-by: Alberto Garcia <address@hidden>
---
 block.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/block.c b/block.c
index 9b707e3..2c36351 100644
--- a/block.c
+++ b/block.c
@@ -2624,13 +2624,14 @@ int bdrv_drop_intermediate(BlockDriverState *active, 
BlockDriverState *top,
     if (ret) {
         goto exit;
     }
-    bdrv_set_backing_hd(new_top_bs, base_bs);
+    bdrv_set_backing_hd(new_top_bs, NULL);
 
     QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
         /* so that bdrv_close() does not recursively close the chain */
         bdrv_set_backing_hd(intermediate_state->bs, NULL);
         bdrv_unref(intermediate_state->bs);
     }
+    bdrv_set_backing_hd(new_top_bs, base_bs);
     ret = 0;
 
 exit:
-- 
2.1.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]