]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage_util: Generate the qcow secret earlier
authorJohn Ferlan <jferlan@redhat.com>
Wed, 18 Apr 2018 18:08:51 +0000 (14:08 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 15 May 2018 20:55:09 +0000 (16:55 -0400)
Rather than having storageBackendCreateQemuImgCheckEncryption
perform the virStorageGenerateQcowEncryption, let's just do that
earlier during storageBackendCreateQemuImg so that the check
helper is just a check helper rather doing something different
based on whether the format is qcow[2] or raw based encryption.

This fixes an issue in the storageBackendResizeQemuImg processing
for qcow encryption where if a secret was not available for a
volume, a new secret will not be generated and instead an error
message will be generated.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/storage/storage_util.c

index 37a649d17ba11dff9a9e040ded32377f7843d418..64d4d1d7d2bbe7662a046b7c0a624ea5744cf04e 100644 (file)
@@ -901,10 +901,10 @@ storageBackendCreateQemuImgCheckEncryption(int format,
                            _("too many secrets for qcow encryption"));
             return -1;
         }
-        if (enc->format == VIR_STORAGE_ENCRYPTION_FORMAT_DEFAULT ||
-            enc->nsecrets == 0) {
-            if (virStorageGenerateQcowEncryption(vol) < 0)
-                return -1;
+        if (enc->nsecrets == 0) {
+            virReportError(VIR_ERR_XML_ERROR, "%s",
+                           _("no secret provided for qcow encryption"));
+            return -1;
         }
     } else if (format == VIR_STORAGE_FILE_RAW) {
         if (enc->format != VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) {
@@ -1309,6 +1309,26 @@ storageBackendCreateQemuImgSecretPath(virStoragePoolObjPtr pool,
 }
 
 
+static int
+storageBackendGenerateSecretData(virStorageVolDefPtr vol)
+{
+    virStorageEncryptionPtr enc = vol->target.encryption;
+
+    if (!enc)
+        return 0;
+
+    if ((vol->target.format == VIR_STORAGE_FILE_QCOW ||
+         vol->target.format == VIR_STORAGE_FILE_QCOW2) &&
+        (enc->format == VIR_STORAGE_ENCRYPTION_FORMAT_DEFAULT ||
+         enc->nsecrets == 0)) {
+        if (virStorageGenerateQcowEncryption(vol) < 0)
+            return -1;
+    }
+
+    return 0;
+}
+
+
 static int
 storageBackendCreateQemuImg(virStoragePoolObjPtr pool,
                             virStorageVolDefPtr vol,
@@ -1330,6 +1350,9 @@ storageBackendCreateQemuImg(virStoragePoolObjPtr pool,
         return -1;
     }
 
+    if (storageBackendGenerateSecretData(vol) < 0)
+        goto cleanup;
+
     if (vol->target.format == VIR_STORAGE_FILE_RAW &&
         vol->target.encryption &&
         vol->target.encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) {