]> Git Repo - qemu.git/commitdiff
block: remove bs from lists before closing
authorAnton Kuchin <[email protected]>
Tue, 7 May 2019 08:12:56 +0000 (11:12 +0300)
committerKevin Wolf <[email protected]>
Fri, 10 May 2019 14:45:40 +0000 (16:45 +0200)
Close involves flush that can be performed asynchronously and bs
must be protected from being referenced before it is deleted.

Signed-off-by: Anton Kuchin <[email protected]>
Signed-off-by: Kevin Wolf <[email protected]>
block.c

diff --git a/block.c b/block.c
index 5c2c6aa761f8953a5224b27595e3027268347ab3..6999aad4460b1ae1651217374f9575d12d22eb32 100644 (file)
--- a/block.c
+++ b/block.c
@@ -4082,14 +4082,14 @@ static void bdrv_delete(BlockDriverState *bs)
     assert(bdrv_op_blocker_is_empty(bs));
     assert(!bs->refcnt);
 
-    bdrv_close(bs);
-
     /* remove from list, if necessary */
     if (bs->node_name[0] != '\0') {
         QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
     }
     QTAILQ_REMOVE(&all_bdrv_states, bs, bs_list);
 
+    bdrv_close(bs);
+
     g_free(bs);
 }
 
This page took 0.033058 seconds and 4 git commands to generate.