404507
From 53d9458b2d6095e376f2b5cacf30da7b2227f69d Mon Sep 17 00:00:00 2001
404507
Message-Id: <53d9458b2d6095e376f2b5cacf30da7b2227f69d@dist-git>
404507
From: Peter Krempa <pkrempa@redhat.com>
404507
Date: Thu, 23 Nov 2017 19:02:13 +0100
404507
Subject: [PATCH] qemu: Move snapshot disk validation functions into one
404507
404507
Move the code so that both the new image and old image can be verified
404507
in the same function.
404507
404507
(cherry picked from commit 8ffdeed455650557df531aafc66c20b31bd4e0c4)
404507
404507
https://bugzilla.redhat.com/show_bug.cgi?id=1511480
404507
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
404507
---
404507
 src/qemu/qemu_driver.c | 91 ++++++++++++++++++++------------------------------
404507
 1 file changed, 36 insertions(+), 55 deletions(-)
404507
404507
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
404507
index b35ab6d30e..aa6a326bb4 100644
404507
--- a/src/qemu/qemu_driver.c
404507
+++ b/src/qemu/qemu_driver.c
404507
@@ -13953,17 +13953,19 @@ qemuDomainSnapshotCreateActiveInternal(virConnectPtr conn,
404507
 
404507
 
404507
 static int
404507
-qemuDomainSnapshotPrepareDiskExternalBackingInactive(virDomainDiskDefPtr disk)
404507
+qemuDomainSnapshotPrepareDiskExternalInactive(virDomainSnapshotDiskDefPtr snapdisk,
404507
+                                              virDomainDiskDefPtr domdisk)
404507
 {
404507
-    int actualType = virStorageSourceGetActualType(disk->src);
404507
+    int domDiskType = virStorageSourceGetActualType(domdisk->src);
404507
+    int snapDiskType = virStorageSourceGetActualType(snapdisk->src);
404507
 
404507
-    switch ((virStorageType) actualType) {
404507
+    switch ((virStorageType) domDiskType) {
404507
     case VIR_STORAGE_TYPE_BLOCK:
404507
     case VIR_STORAGE_TYPE_FILE:
404507
-        return 0;
404507
+        break;
404507
 
404507
     case VIR_STORAGE_TYPE_NETWORK:
404507
-        switch ((virStorageNetProtocol) disk->src->protocol) {
404507
+        switch ((virStorageNetProtocol) domdisk->src->protocol) {
404507
         case VIR_STORAGE_NET_PROTOCOL_NONE:
404507
         case VIR_STORAGE_NET_PROTOCOL_NBD:
404507
         case VIR_STORAGE_NET_PROTOCOL_RBD:
404507
@@ -13981,7 +13983,7 @@ qemuDomainSnapshotPrepareDiskExternalBackingInactive(virDomainDiskDefPtr disk)
404507
             virReportError(VIR_ERR_INTERNAL_ERROR,
404507
                            _("external inactive snapshots are not supported on "
404507
                              "'network' disks using '%s' protocol"),
404507
-                           virStorageNetProtocolTypeToString(disk->src->protocol));
404507
+                           virStorageNetProtocolTypeToString(domdisk->src->protocol));
404507
             return -1;
404507
         }
404507
         break;
404507
@@ -13992,7 +13994,23 @@ qemuDomainSnapshotPrepareDiskExternalBackingInactive(virDomainDiskDefPtr disk)
404507
     case VIR_STORAGE_TYPE_LAST:
404507
         virReportError(VIR_ERR_INTERNAL_ERROR,
404507
                        _("external inactive snapshots are not supported on "
404507
-                         "'%s' disks"), virStorageTypeToString(actualType));
404507
+                         "'%s' disks"), virStorageTypeToString(domDiskType));
404507
+        return -1;
404507
+    }
404507
+
404507
+    switch ((virStorageType) snapDiskType) {
404507
+    case VIR_STORAGE_TYPE_BLOCK:
404507
+    case VIR_STORAGE_TYPE_FILE:
404507
+        break;
404507
+
404507
+    case VIR_STORAGE_TYPE_NETWORK:
404507
+    case VIR_STORAGE_TYPE_DIR:
404507
+    case VIR_STORAGE_TYPE_VOLUME:
404507
+    case VIR_STORAGE_TYPE_NONE:
404507
+    case VIR_STORAGE_TYPE_LAST:
404507
+        virReportError(VIR_ERR_INTERNAL_ERROR,
404507
+                       _("external inactive snapshots are not supported on "
404507
+                         "'%s' disks"), virStorageTypeToString(snapDiskType));
404507
         return -1;
404507
     }
404507
 
404507
@@ -14001,33 +14019,27 @@ qemuDomainSnapshotPrepareDiskExternalBackingInactive(virDomainDiskDefPtr disk)
404507
 
404507
 
404507
 static int
404507
-qemuDomainSnapshotPrepareDiskExternalBackingActive(virDomainDiskDefPtr disk)
404507
+qemuDomainSnapshotPrepareDiskExternalActive(virDomainSnapshotDiskDefPtr snapdisk,
404507
+                                            virDomainDiskDefPtr domdisk)
404507
 {
404507
-    if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
404507
+    int actualType = virStorageSourceGetActualType(snapdisk->src);
404507
+
404507
+    if (domdisk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
404507
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
404507
                        _("external active snapshots are not supported on scsi "
404507
                          "passthrough devices"));
404507
         return -1;
404507
     }
404507
 
404507
-    return 0;
404507
-}
404507
-
404507
-
404507
-static int
404507
-qemuDomainSnapshotPrepareDiskExternalOverlayActive(virDomainSnapshotDiskDefPtr disk)
404507
-{
404507
-    int actualType = virStorageSourceGetActualType(disk->src);
404507
-
404507
     switch ((virStorageType) actualType) {
404507
     case VIR_STORAGE_TYPE_BLOCK:
404507
     case VIR_STORAGE_TYPE_FILE:
404507
-        return 0;
404507
+        break;
404507
 
404507
     case VIR_STORAGE_TYPE_NETWORK:
404507
-        switch ((virStorageNetProtocol) disk->src->protocol) {
404507
+        switch ((virStorageNetProtocol) snapdisk->src->protocol) {
404507
         case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
404507
-            return 0;
404507
+            break;
404507
 
404507
         case VIR_STORAGE_NET_PROTOCOL_NONE:
404507
         case VIR_STORAGE_NET_PROTOCOL_NBD:
404507
@@ -14045,7 +14057,7 @@ qemuDomainSnapshotPrepareDiskExternalOverlayActive(virDomainSnapshotDiskDefPtr d
404507
             virReportError(VIR_ERR_INTERNAL_ERROR,
404507
                            _("external active snapshots are not supported on "
404507
                              "'network' disks using '%s' protocol"),
404507
-                           virStorageNetProtocolTypeToString(disk->src->protocol));
404507
+                           virStorageNetProtocolTypeToString(snapdisk->src->protocol));
404507
             return -1;
404507
 
404507
         }
404507
@@ -14065,31 +14077,6 @@ qemuDomainSnapshotPrepareDiskExternalOverlayActive(virDomainSnapshotDiskDefPtr d
404507
 }
404507
 
404507
 
404507
-static int
404507
-qemuDomainSnapshotPrepareDiskExternalOverlayInactive(virDomainSnapshotDiskDefPtr disk)
404507
-{
404507
-    int actualType = virStorageSourceGetActualType(disk->src);
404507
-
404507
-    switch ((virStorageType) actualType) {
404507
-    case VIR_STORAGE_TYPE_BLOCK:
404507
-    case VIR_STORAGE_TYPE_FILE:
404507
-        return 0;
404507
-
404507
-    case VIR_STORAGE_TYPE_NETWORK:
404507
-    case VIR_STORAGE_TYPE_DIR:
404507
-    case VIR_STORAGE_TYPE_VOLUME:
404507
-    case VIR_STORAGE_TYPE_NONE:
404507
-    case VIR_STORAGE_TYPE_LAST:
404507
-        virReportError(VIR_ERR_INTERNAL_ERROR,
404507
-                       _("external inactive snapshots are not supported on "
404507
-                         "'%s' disks"), virStorageTypeToString(actualType));
404507
-        return -1;
404507
-    }
404507
-
404507
-    return 0;
404507
-}
404507
-
404507
-
404507
 static int
404507
 qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn,
404507
                                       virDomainDiskDefPtr disk,
404507
@@ -14107,16 +14094,10 @@ qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn,
404507
         if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
404507
             return -1;
404507
 
404507
-        if (qemuDomainSnapshotPrepareDiskExternalBackingInactive(disk) < 0)
404507
-            return -1;
404507
-
404507
-        if (qemuDomainSnapshotPrepareDiskExternalOverlayInactive(snapdisk) < 0)
404507
+        if (qemuDomainSnapshotPrepareDiskExternalInactive(snapdisk, disk) < 0)
404507
             return -1;
404507
     } else {
404507
-        if (qemuDomainSnapshotPrepareDiskExternalBackingActive(disk) < 0)
404507
-            return -1;
404507
-
404507
-        if (qemuDomainSnapshotPrepareDiskExternalOverlayActive(snapdisk) < 0)
404507
+        if (qemuDomainSnapshotPrepareDiskExternalActive(snapdisk, disk) < 0)
404507
             return -1;
404507
     }
404507
 
404507
-- 
404507
2.15.0
404507