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:
parent
5bd313266b
commit
644483d97e
49
qemu-img.c
49
qemu-img.c
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user