mirror_top_bs must be removed from the graph again when creating the dirty bitmap fails.
Signed-off-by: Kevin Wolf <kw...@redhat.com> Reviewed-by: Fam Zheng <f...@redhat.com> Reviewed-by: Eric Blake <ebl...@redhat.com> --- block/mirror.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/block/mirror.c b/block/mirror.c index 001b5f0..f24dc51 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -1197,10 +1197,7 @@ static void mirror_start_job(const char *job_id, BlockDriverState *bs, s->dirty_bitmap = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp); if (!s->dirty_bitmap) { - g_free(s->replaces); - blk_unref(s->target); - block_job_unref(&s->common); - return; + goto fail; } /* Required permissions are already taken with blk_new() */ -- 1.8.3.1