]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Extract logic for updating 'detect_zeroes' mode
authorPeter Krempa <pkrempa@redhat.com>
Wed, 29 Nov 2017 14:17:10 +0000 (15:17 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 3 Apr 2018 13:48:37 +0000 (15:48 +0200)
For some reason we've decided to silently translate the disk
detect_zeroes mode if it would be invalid. Extract the
logic so that it does not need to be copypasta'd across the code base.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms
src/qemu/qemu_command.c

index ac3a3d9966f0679126066fa646c5d4e0b35bb6d5..ef16431aaf44b2e0f4b5aa308dc6cbb36dd271ec 100644 (file)
@@ -29362,3 +29362,25 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
     virStoragePoolDefFree(pooldef);
     return ret;
 }
+
+
+/**
+ * virDomainDiskGetDetectZeroesMode:
+ * @discard: disk/image sector discard setting
+ * @detect_zeroes: disk/image zero sector detection mode
+ *
+ * As a convenience syntax, if discards are ignored and zero detection is set
+ * to 'unmap', then simply behave like zero detection is set to 'on'.  But
+ * don't change it in the XML for easier adjustments.  This behaviour is
+ * documented.
+ */
+int
+virDomainDiskGetDetectZeroesMode(virDomainDiskDiscard discard,
+                                 virDomainDiskDetectZeroes detect_zeroes)
+{
+    if (discard != VIR_DOMAIN_DISK_DISCARD_UNMAP &&
+        detect_zeroes == VIR_DOMAIN_DISK_DETECT_ZEROES_UNMAP)
+        return VIR_DOMAIN_DISK_DETECT_ZEROES_ON;
+
+    return detect_zeroes;
+}
index 650901c1f49b93eab6de45f3d10bfa7453d095db..bd17bd99aea95af5dd212d3276810a7c008a38d5 100644 (file)
@@ -3528,5 +3528,8 @@ virDomainNetResolveActualType(virDomainNetDefPtr iface)
 
 int virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def);
 
+int
+virDomainDiskGetDetectZeroesMode(virDomainDiskDiscard discard,
+                                 virDomainDiskDetectZeroes detect_zeroes);
 
 #endif /* __DOMAIN_CONF_H */
index 73f25d1c79285a50ff85e596befa696a23dcf051..f6897915ce7c214ad1b9adb4383ef959331f04b1 100644 (file)
@@ -326,6 +326,7 @@ virDomainDiskErrorPolicyTypeToString;
 virDomainDiskFindByBusAndDst;
 virDomainDiskGeometryTransTypeFromString;
 virDomainDiskGeometryTransTypeToString;
+virDomainDiskGetDetectZeroesMode;
 virDomainDiskGetDriver;
 virDomainDiskGetFormat;
 virDomainDiskGetSource;
index 9d27c3edad7842f12a8fcfe1f20a3b17a24f54c1..94a72057c7e90775d29ef0cb6dd5f6535c2a15cf 100644 (file)
@@ -1729,6 +1729,8 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
                   virQEMUCapsPtr qemuCaps)
 {
     virBuffer opt = VIR_BUFFER_INITIALIZER;
+    int detect_zeroes = virDomainDiskGetDetectZeroesMode(disk->discard,
+                                                         disk->detect_zeroes);
 
     if (qemuBuildDriveSourceStr(disk, qemuCaps, &opt) < 0)
         goto error;
@@ -1808,20 +1810,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
                           virDomainDiskDiscardTypeToString(disk->discard));
     }
 
-    if (disk->detect_zeroes) {
-        int detect_zeroes = disk->detect_zeroes;
-
-        /*
-         * As a convenience syntax, if discards are ignored and
-         * zero detection is set to 'unmap', then simply behave
-         * like zero detection is set to 'on'.  But don't change
-         * it in the XML for easier adjustments.  This behaviour
-         * is documented.
-         */
-        if (disk->discard != VIR_DOMAIN_DISK_DISCARD_UNMAP &&
-            detect_zeroes == VIR_DOMAIN_DISK_DETECT_ZEROES_UNMAP)
-            detect_zeroes = VIR_DOMAIN_DISK_DETECT_ZEROES_ON;
-
+    if (detect_zeroes) {
         virBufferAsprintf(&opt, ",detect-zeroes=%s",
                           virDomainDiskDetectZeroesTypeToString(detect_zeroes));
     }