]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: driver: Move around code to avoid need to rollback
authorPeter Krempa <pkrempa@redhat.com>
Mon, 23 May 2016 13:54:11 +0000 (15:54 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 25 May 2016 11:22:36 +0000 (13:22 +0200)
qemuDomainChangeDiskLive rolled back few changes to the disk definition
if changing of the media failed. This can be avoided by moving some code
around.

src/qemu/qemu_driver.c

index cd53d3c5a55c673af46a781541e21cadc7072e56..6979c858874518cec5ab86d88a96aa6cc30d73a3 100644 (file)
@@ -7655,8 +7655,6 @@ qemuDomainChangeDiskLive(virConnectPtr conn,
 {
     virDomainDiskDefPtr disk = dev->data.disk;
     virDomainDiskDefPtr orig_disk = NULL;
-    int startupPolicy;
-    int snapshot;
     int ret = -1;
 
     if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
@@ -7674,18 +7672,12 @@ qemuDomainChangeDiskLive(virConnectPtr conn,
         goto cleanup;
     }
 
-    startupPolicy = orig_disk->startupPolicy;
-    snapshot = orig_disk->snapshot;
-
     switch ((virDomainDiskDevice) disk->device) {
     case VIR_DOMAIN_DISK_DEVICE_CDROM:
     case VIR_DOMAIN_DISK_DEVICE_FLOPPY:
         if (!qemuDomainDiskChangeSupported(disk, orig_disk))
             goto cleanup;
 
-        orig_disk->startupPolicy = dev->data.disk->startupPolicy;
-        orig_disk->snapshot = dev->data.disk->snapshot;
-
         if (qemuDomainDiskSourceDiffers(disk, orig_disk)) {
             /* Add the new disk src into shared disk hash table */
             if (qemuAddSharedDevice(driver, dev, vm->def->name) < 0)
@@ -7696,11 +7688,14 @@ qemuDomainChangeDiskLive(virConnectPtr conn,
                                                force) < 0) {
                 ignore_value(qemuRemoveSharedDisk(driver, dev->data.disk,
                                                   vm->def->name));
-                goto rollback;
+                goto cleanup;
             }
 
             dev->data.disk->src = NULL;
         }
+
+        orig_disk->startupPolicy = dev->data.disk->startupPolicy;
+        orig_disk->snapshot = dev->data.disk->snapshot;
         break;
 
     case VIR_DOMAIN_DISK_DEVICE_DISK:
@@ -7719,11 +7714,6 @@ qemuDomainChangeDiskLive(virConnectPtr conn,
     ret = 0;
  cleanup:
     return ret;
-
- rollback:
-    orig_disk->snapshot = snapshot;
-    orig_disk->startupPolicy = startupPolicy;
-    goto cleanup;
 }
 
 static int