]> git.proxmox.com Git - qemu.git/blobdiff - block/stream.c
block: stop relying on io_flush() in bdrv_drain_all()
[qemu.git] / block / stream.c
index 7fe9e486bf3f9c6b2b2c08669dd23b4c29709206..db49b4d85f41f96f0ed9454619e9ca35174fed4d 100644 (file)
@@ -57,6 +57,11 @@ static void close_unused_images(BlockDriverState *top, BlockDriverState *base,
     BlockDriverState *intermediate;
     intermediate = top->backing_hd;
 
+    /* Must assign before bdrv_delete() to prevent traversing dangling pointer
+     * while we delete backing image instances.
+     */
+    top->backing_hd = base;
+
     while (intermediate) {
         BlockDriverState *unused;
 
@@ -70,7 +75,6 @@ static void close_unused_images(BlockDriverState *top, BlockDriverState *base,
         unused->backing_hd = NULL;
         bdrv_delete(unused);
     }
-    top->backing_hd = base;
 }
 
 static void coroutine_fn stream_run(void *opaque)