mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
qemu-img: rebase: Reuse in-chain BlockDriverState
If a chain was detected, don't open a new BlockBackend from the target backing file which will create a new BlockDriverState. Instead, create an empty BlockBackend and attach the already open BlockDriverState. Permissions for blk_new() were copied from blk_new_open() when flags = 0. Reviewed-by: Karl Heubaum <karl.heubaum@oracle.com> Reviewed-by: Eyal Moscovici <eyal.moscovici@oracle.com> Signed-off-by: Sagi Amit <sagi.amit@oracle.com> Co-developed-by: Sagi Amit <sagi.amit@oracle.com> Signed-off-by: Sam Eiderman <shmuel.eiderman@oracle.com> Message-id: 20190523163337.4497-4-shmuel.eiderman@oracle.com Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
863cc78f1b
commit
330c729571
1 changed files with 23 additions and 10 deletions
33
qemu-img.c
33
qemu-img.c
|
@ -3358,16 +3358,29 @@ static int img_rebase(int argc, char **argv)
|
|||
* in its chain.
|
||||
*/
|
||||
prefix_chain_bs = bdrv_find_backing_image(bs, out_real_path);
|
||||
|
||||
blk_new_backing = blk_new_open(out_real_path, NULL,
|
||||
options, src_flags, &local_err);
|
||||
g_free(out_real_path);
|
||||
if (!blk_new_backing) {
|
||||
error_reportf_err(local_err,
|
||||
"Could not open new backing file '%s': ",
|
||||
out_baseimg);
|
||||
ret = -1;
|
||||
goto out;
|
||||
if (prefix_chain_bs) {
|
||||
g_free(out_real_path);
|
||||
blk_new_backing = blk_new(BLK_PERM_CONSISTENT_READ,
|
||||
BLK_PERM_ALL);
|
||||
ret = blk_insert_bs(blk_new_backing, prefix_chain_bs,
|
||||
&local_err);
|
||||
if (ret < 0) {
|
||||
error_reportf_err(local_err,
|
||||
"Could not reuse backing file '%s': ",
|
||||
out_baseimg);
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
blk_new_backing = blk_new_open(out_real_path, NULL,
|
||||
options, src_flags, &local_err);
|
||||
g_free(out_real_path);
|
||||
if (!blk_new_backing) {
|
||||
error_reportf_err(local_err,
|
||||
"Could not open new backing file '%s': ",
|
||||
out_baseimg);
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue