On Fri, Jul 26, 2013 at 02:43:44PM +0800, Wenchao Xia wrote:
Reviewed-by: Wenchao Xia <xiaw...@linux.vnet.ibm.com>
One question: old code missed itself in bdrv_drain_all(), is that a bug?
Sorry, I don't understand the question. Can you rephrase it?
Before this patch, in the code path: bdrv_close()->bdrv_drain_all(),
the *bs does not exist in bdrv_states, so the code missed the chance to
drain the request on *bs. That is a bug, and this patch is actually a
bugfix?
In bdrv_delete() make sure to call bdrv_make_anon() *after* bdrv_close()
so that the device is still seen by bdrv_drain_all() when iterating
bdrv_states.
Cc: qemu-sta...@nongnu.org
Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com>
---
block.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/block.c b/block.c
index 6cd39fa..9d68270 100644
--- a/block.c
+++ b/block.c
@@ -1600,11 +1600,11 @@ void bdrv_delete(BlockDriverState *bs)
assert(!bs->job);
assert(!bs->in_use);
+ bdrv_close(bs);
+
/* remove from list, if necessary */
bdrv_make_anon(bs);
- bdrv_close(bs);
-
g_free(bs);
}
--
Best Regards
Wenchao Xia
--
Best Regards
Wenchao Xia