[PATCH 15/17] qemuMigrationSrcNBDCopyCancel: Use qemuBlockStorageSourceAttachRollback to detach migration NBD blockdevs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Rewrite the code to use the common tooling for removing blockdevs
instead of the ad-hoc qemuBlockStorageSourceDetachOneBlockdev helper.

Use of the common infrastructure will properly handle cases when the raw
driver is ommited from the block graph.

Since the TLS data object is shared for all migration QMP commands and
objects we need to strip it's alias from the definition of the storage
source before attempting to detach it.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/qemu/qemu_migration.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index ac58aa1a8c..0f4c6dbe98 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -938,12 +938,26 @@ qemuMigrationSrcNBDCopyCancel(virDomainObj *vm,
     for (i = 0; i < vm->def->ndisks; i++) {
         virDomainDiskDef *disk = vm->def->disks[i];
         qemuDomainDiskPrivate *diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
+        g_autoptr(qemuBlockStorageSourceAttachData) data = NULL;

         if (!diskPriv->migrSource)
             continue;

-        qemuBlockStorageSourceDetachOneBlockdev(vm, asyncJob,
-                                                diskPriv->migrSource);
+        /* remove the alias of the TLS object when we're about to detach the
+         * migration NBD blockdev as the TLS object is shared for the migration
+         * and we don't want to detach it. The alias is not needed after
+         * the JSON object of the blockdev props is formatted */
+        g_clear_pointer(&diskPriv->migrSource->tlsAlias, g_free);
+
+        data = qemuBlockStorageSourceDetachPrepare(diskPriv->migrSource);
+
+        if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0)
+            goto cleanup;
+
+        qemuBlockStorageSourceAttachRollback(qemuDomainGetMonitor(vm), data);
+
+        qemuDomainObjExitMonitor(vm);
+
         g_clear_pointer(&diskPriv->migrSource, virObjectUnref);
     }

-- 
2.42.0
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux