qemu-img: Use blk_new_open() in img_rebase()

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 1423162705-32065-9-git-send-email-mreitz@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Max Reitz 2015-02-05 13:58:17 -05:00 committed by Stefan Hajnoczi
parent 5bd313266b
commit 644483d97e

View File

@ -2435,7 +2435,6 @@ static int img_rebase(int argc, char **argv)
{ {
BlockBackend *blk = NULL, *blk_old_backing = NULL, *blk_new_backing = NULL; BlockBackend *blk = NULL, *blk_old_backing = NULL, *blk_new_backing = NULL;
BlockDriverState *bs = NULL, *bs_old_backing = NULL, *bs_new_backing = NULL; BlockDriverState *bs = NULL, *bs_old_backing = NULL, *bs_new_backing = NULL;
BlockDriver *old_backing_drv, *new_backing_drv;
char *filename; char *filename;
const char *fmt, *cache, *src_cache, *out_basefmt, *out_baseimg; const char *fmt, *cache, *src_cache, *out_basefmt, *out_baseimg;
int c, flags, src_flags, ret; int c, flags, src_flags, ret;
@ -2529,22 +2528,8 @@ static int img_rebase(int argc, char **argv)
} }
bs = blk_bs(blk); bs = blk_bs(blk);
/* Find the right drivers for the backing files */
old_backing_drv = NULL;
new_backing_drv = NULL;
if (!unsafe && bs->backing_format[0] != '\0') {
old_backing_drv = bdrv_find_format(bs->backing_format);
if (old_backing_drv == NULL) {
error_report("Invalid format name: '%s'", bs->backing_format);
ret = -1;
goto out;
}
}
if (out_basefmt != NULL) { if (out_basefmt != NULL) {
new_backing_drv = bdrv_find_format(out_basefmt); if (bdrv_find_format(out_basefmt) == NULL) {
if (new_backing_drv == NULL) {
error_report("Invalid format name: '%s'", out_basefmt); error_report("Invalid format name: '%s'", out_basefmt);
ret = -1; ret = -1;
goto out; goto out;
@ -2554,29 +2539,41 @@ static int img_rebase(int argc, char **argv)
/* For safe rebasing we need to compare old and new backing file */ /* For safe rebasing we need to compare old and new backing file */
if (!unsafe) { if (!unsafe) {
char backing_name[PATH_MAX]; char backing_name[PATH_MAX];
QDict *options = NULL;
if (bs->backing_format[0] != '\0') {
options = qdict_new();
qdict_put(options, "driver", qstring_from_str(bs->backing_format));
}
blk_old_backing = blk_new_with_bs("old_backing", &error_abort);
bs_old_backing = blk_bs(blk_old_backing);
bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name)); bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));
ret = bdrv_open(&bs_old_backing, backing_name, NULL, NULL, src_flags, blk_old_backing = blk_new_open("old_backing", backing_name, NULL,
old_backing_drv, &local_err); options, src_flags, &local_err);
if (ret) { if (!blk_old_backing) {
error_report("Could not open old backing file '%s': %s", error_report("Could not open old backing file '%s': %s",
backing_name, error_get_pretty(local_err)); backing_name, error_get_pretty(local_err));
error_free(local_err); error_free(local_err);
goto out; goto out;
} }
bs_old_backing = blk_bs(blk_old_backing);
if (out_baseimg[0]) { if (out_baseimg[0]) {
blk_new_backing = blk_new_with_bs("new_backing", &error_abort); if (out_basefmt) {
bs_new_backing = blk_bs(blk_new_backing); options = qdict_new();
ret = bdrv_open(&bs_new_backing, out_baseimg, NULL, NULL, src_flags, qdict_put(options, "driver", qstring_from_str(out_basefmt));
new_backing_drv, &local_err); } else {
if (ret) { options = NULL;
}
blk_new_backing = blk_new_open("new_backing", out_baseimg, NULL,
options, src_flags, &local_err);
if (!blk_new_backing) {
error_report("Could not open new backing file '%s': %s", error_report("Could not open new backing file '%s': %s",
out_baseimg, error_get_pretty(local_err)); out_baseimg, error_get_pretty(local_err));
error_free(local_err); error_free(local_err);
goto out; goto out;
} }
bs_new_backing = blk_bs(blk_new_backing);
} }
} }