bdrv_append_temp_snapshot() uses bdrv_new() to create an empty BDS before invoking bdrv_open() on that BDS. This is probably a relict from when it used to do some modifications on that empty BDS, but now that is unnecessary, so we can just set bs_snapshot to NULL and let bdrv_open() do the rest.
The same applies to bdrv_open_backing_file(). There is even a bit more cruft here: The assert() was intended for the BDS which is indirectly passed as the first bdrv_open() argument, so we can now drop it, too. Signed-off-by: Max Reitz <[email protected]> --- block.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/block.c b/block.c index 5b02990..aae1d69 100644 --- a/block.c +++ b/block.c @@ -1212,19 +1212,15 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) goto free_exit; } - backing_hd = bdrv_new(); - if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) { qdict_put(options, "driver", qstring_from_str(bs->backing_format)); } - assert(bs->backing == NULL); + backing_hd = NULL; ret = bdrv_open_inherit(&backing_hd, *backing_filename ? backing_filename : NULL, NULL, options, 0, bs, &child_backing, &local_err); if (ret < 0) { - bdrv_unref(backing_hd); - backing_hd = NULL; bs->open_flags |= BDRV_O_NO_BACKING; error_setg(errp, "Could not open backing file: %s", error_get_pretty(local_err)); @@ -1350,8 +1346,7 @@ int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp) qdict_put(snapshot_options, "driver", qstring_from_str("qcow2")); - bs_snapshot = bdrv_new(); - + bs_snapshot = NULL; ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options, flags, &local_err); if (ret < 0) { -- 2.6.2
