mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
qemuBlockJobProcessEventCompletedPull: Add backingStore terminators if base is NULL
When doing a blockpull with NULL base the full contents of the disk are pulled into the topmost image which then becomes fully self-contained. qemuBlockJobProcessEventCompletedPull doesn't install the backing chain terminators though, although it's guaranteed that there will be no backing chain behind disk->src. Add the terminators for completness and for disabling backing chain detection on further boots. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
46e748aa02
commit
b4d0207906
@ -992,6 +992,7 @@ qemuBlockJobProcessEventCompletedPull(virQEMUDriverPtr driver,
|
||||
qemuBlockJobDataPtr job,
|
||||
qemuDomainAsyncJob asyncJob)
|
||||
{
|
||||
virStorageSource *base = NULL;
|
||||
virStorageSourcePtr baseparent = NULL;
|
||||
virDomainDiskDefPtr cfgdisk = NULL;
|
||||
virStorageSourcePtr cfgbase = NULL;
|
||||
@ -1015,8 +1016,11 @@ qemuBlockJobProcessEventCompletedPull(virQEMUDriverPtr driver,
|
||||
return;
|
||||
|
||||
if (job->data.pull.base) {
|
||||
base = job->data.pull.base;
|
||||
|
||||
if (cfgdisk)
|
||||
cfgbase = cfgdisk->src->backingStore;
|
||||
|
||||
for (n = job->disk->src->backingStore; n && n != job->data.pull.base; n = n->backingStore) {
|
||||
/* find the image on top of 'base' */
|
||||
|
||||
@ -1027,10 +1031,17 @@ qemuBlockJobProcessEventCompletedPull(virQEMUDriverPtr driver,
|
||||
|
||||
baseparent = n;
|
||||
}
|
||||
} else {
|
||||
/* create terminators for the chain; since we are pulling everything
|
||||
* into the top image the chain is automatically considered terminated */
|
||||
base = virStorageSourceNew();
|
||||
|
||||
if (cfgdisk)
|
||||
cfgbase = virStorageSourceNew();
|
||||
}
|
||||
|
||||
tmp = job->disk->src->backingStore;
|
||||
job->disk->src->backingStore = job->data.pull.base;
|
||||
job->disk->src->backingStore = base;
|
||||
if (baseparent)
|
||||
baseparent->backingStore = NULL;
|
||||
qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, tmp);
|
||||
|
Loading…
Reference in New Issue
Block a user