Now that we remember the alias we've used to attach the secret objects
we should reuse them rather than trying to infer them from the disk
configuration.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_hotplug.c | 43 ++++++++++++-------------------------------
1 file changed, 12 insertions(+), 31 deletions(-)
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 2899f49fff..5e2ca1b988 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -3831,14 +3831,15 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
virDomainObjPtr vm,
virDomainDiskDefPtr disk)
{
+ qemuDomainStorageSourcePrivatePtr diskPriv =
QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(disk->src);
virDomainDeviceDef dev;
virObjectEventPtr event;
size_t i;
const char *src = virDomainDiskGetSource(disk);
qemuDomainObjPrivatePtr priv = vm->privateData;
char *drivestr;
- char *objAlias = NULL;
- char *encAlias = NULL;
+ const char *authAlias = NULL;
+ const char *encAlias = NULL;
VIR_DEBUG("Removing disk %s from domain %p %s",
disk->info.alias, vm, vm->def->name);
@@ -3848,32 +3849,14 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
if (!(drivestr = qemuAliasFromDisk(disk)))
return -1;
- /* Let's look for some markers for a secret object and create an alias
- * object to be used to attempt to delete the object that was created.
- * We cannot just use the disk private secret info since it would have
- * been removed during cleanup of qemuProcessLaunch. Likewise, libvirtd
- * restart wouldn't have them, so no assumption can be made. */
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_SECRET) &&
- qemuDomainStorageSourceHasAuth(disk->src)) {
-
- if (!(objAlias =
- qemuDomainGetSecretAESAlias(disk->info.alias, false))) {
- VIR_FREE(drivestr);
- return -1;
- }
- }
-
- /* Similarly, if this is possible a device using LUKS encryption, we
- * can remove the luks object password too
- */
- if (qemuDomainDiskHasEncryptionSecret(disk->src)) {
+ if (diskPriv) {
+ if (diskPriv->secinfo &&
+ diskPriv->secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES)
+ authAlias = diskPriv->secinfo->s.aes.alias;
- if (!(encAlias =
- qemuDomainGetSecretAESAlias(disk->info.alias, true))) {
- VIR_FREE(objAlias);
- VIR_FREE(drivestr);
- return -1;
- }
+ if (diskPriv->encinfo &&
+ diskPriv->encinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES)
+ encAlias = diskPriv->encinfo->s.aes.alias;
}
qemuDomainObjEnterMonitor(driver, vm);
@@ -3882,14 +3865,12 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
VIR_FREE(drivestr);
/* If it fails, then so be it - it was a best shot */
- if (objAlias)
- ignore_value(qemuMonitorDelObject(priv->mon, objAlias));
- VIR_FREE(objAlias);
+ if (authAlias)
+ ignore_value(qemuMonitorDelObject(priv->mon, authAlias));
/* If it fails, then so be it - it was a best shot */
if (encAlias)
ignore_value(qemuMonitorDelObject(priv->mon, encAlias));
- VIR_FREE(encAlias);
/* If it fails, then so be it - it was a best shot */
if (disk->src->pr)
--
2.16.2