mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-23 03:42:19 +00:00
qemu: hotplug: Use storage chain helpers in qemuDomainRemoveDiskDevice
Use the new helpers for removing the backing chain in case when -blockdev is used. For -drive this function has a local implementation. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
407fd434bc
commit
513faf6ccc
@ -4381,7 +4381,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
|
|||||||
virDomainDiskDefPtr disk)
|
virDomainDiskDefPtr disk)
|
||||||
{
|
{
|
||||||
qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
|
qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
|
||||||
qemuHotplugDiskSourceDataPtr diskbackend = NULL;
|
VIR_AUTOPTR(qemuBlockStorageSourceChainData) diskBackend = NULL;
|
||||||
virDomainDeviceDef dev;
|
virDomainDeviceDef dev;
|
||||||
size_t i;
|
size_t i;
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
@ -4392,13 +4392,21 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
|
|||||||
VIR_DEBUG("Removing disk %s from domain %p %s",
|
VIR_DEBUG("Removing disk %s from domain %p %s",
|
||||||
disk->info.alias, vm, vm->def->name);
|
disk->info.alias, vm, vm->def->name);
|
||||||
|
|
||||||
if (!(diskbackend = qemuHotplugDiskSourceRemovePrepare(disk, disk->src,
|
|
||||||
priv->qemuCaps)))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (blockdev) {
|
if (blockdev) {
|
||||||
if (VIR_STRDUP(corAlias, diskPriv->nodeCopyOnRead) < 0)
|
if (VIR_STRDUP(corAlias, diskPriv->nodeCopyOnRead) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
if (!(diskBackend = qemuBlockStorageSourceChainDetachPrepareBlockdev(disk->src)))
|
||||||
|
goto cleanup;
|
||||||
|
} else {
|
||||||
|
char *driveAlias;
|
||||||
|
|
||||||
|
if (!(driveAlias = qemuAliasDiskDriveFromDisk(disk)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (!(diskBackend = qemuBlockStorageSourceChainDetachPrepareDrive(disk->src, driveAlias)))
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < vm->def->ndisks; i++) {
|
for (i = 0; i < vm->def->ndisks; i++) {
|
||||||
@ -4413,7 +4421,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
|
|||||||
if (corAlias)
|
if (corAlias)
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, corAlias));
|
ignore_value(qemuMonitorDelObject(priv->mon, corAlias));
|
||||||
|
|
||||||
qemuHotplugDiskSourceRemove(priv->mon, diskbackend);
|
qemuBlockStorageSourceChainDetach(priv->mon, diskBackend);
|
||||||
|
|
||||||
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
if (qemuDomainObjExitMonitor(driver, vm) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -4435,7 +4443,6 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
qemuHotplugDiskSourceDataFree(diskbackend);
|
|
||||||
virDomainDiskDefFree(disk);
|
virDomainDiskDefFree(disk);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user