]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Separate image metadata removal into a function
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 19 Nov 2019 07:43:58 +0000 (08:43 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 22 Nov 2019 09:48:04 +0000 (10:48 +0100)
There are four places where we remove image XATTRs and in all of
them we have the same for() loop with the same body. Move it into
a separate function because I'm about to introduce fifth place
where the same needs to be done.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_block.c
src/qemu/qemu_block.h
src/qemu/qemu_blockjob.c

index b8f02087424e96c14235b3a29d416fb4d4052cc3..1140a33114baa5d7a9b247bb74ddd19339cd5e84 100644 (file)
@@ -22,6 +22,7 @@
 #include "qemu_command.h"
 #include "qemu_domain.h"
 #include "qemu_alias.h"
+#include "qemu_security.h"
 
 #include "viralloc.h"
 #include "virstring.h"
@@ -2588,3 +2589,27 @@ qemuBlockStorageSourceCreateDetectSize(virHashTablePtr blockNamedNodeData,
 
     return 0;
 }
+
+
+int
+qemuBlockRemoveImageMetadata(virQEMUDriverPtr driver,
+                             virDomainObjPtr vm,
+                             const char *diskTarget,
+                             virStorageSourcePtr src)
+{
+    virStorageSourcePtr n;
+    int ret = 0;
+
+    for (n = src; virStorageSourceIsBacking(n); n = n->backingStore) {
+        if (qemuSecurityMoveImageMetadata(driver, vm, n, NULL) < 0) {
+            VIR_WARN("Unable to remove disk metadata on "
+                     "vm %s from %s (disk target %s)",
+                     vm->def->name,
+                     NULLSTR(n->path),
+                     diskTarget);
+            ret = -1;
+        }
+    }
+
+    return ret;
+}
index 5ddeeaf6e27ecdb047232d78f403d394c3f3f9ff..5854641027fbe2635f912645f7af9c04eb2abc86 100644 (file)
@@ -197,3 +197,9 @@ int
 qemuBlockStorageSourceCreateDetectSize(virHashTablePtr blockNamedNodeData,
                                        virStorageSourcePtr src,
                                        virStorageSourcePtr templ);
+
+int
+qemuBlockRemoveImageMetadata(virQEMUDriverPtr driver,
+                             virDomainObjPtr vm,
+                             const char *diskTarget,
+                             virStorageSourcePtr src);
index 5c294f802424f45b641ca628f30244b4c2a119b0..92e4d391c99767b0991dfdb0160a151b789a1e19 100644 (file)
@@ -658,36 +658,18 @@ qemuBlockJobEventProcessLegacyCompleted(virQEMUDriverPtr driver,
         virObjectUnref(disk->src);
         disk->src = disk->mirror;
     } else {
-        virStorageSourcePtr n;
-
         if (disk->mirror) {
             virDomainLockImageDetach(driver->lockManager, vm, disk->mirror);
 
             /* Ideally, we would restore seclabels on the backing chain here
              * but we don't know if somebody else is not using parts of it.
              * Remove security driver metadata so that they are not leaked. */
-            for (n = disk->mirror; virStorageSourceIsBacking(n); n = n->backingStore) {
-                if (qemuSecurityMoveImageMetadata(driver, vm, n, NULL) < 0) {
-                    VIR_WARN("Unable to remove disk metadata on "
-                             "vm %s from %s (disk target %s)",
-                             vm->def->name,
-                             NULLSTR(disk->src->path),
-                             disk->dst);
-                }
-            }
+            qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->mirror);
 
             virObjectUnref(disk->mirror);
         }
 
-        for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
-            if (qemuSecurityMoveImageMetadata(driver, vm, n, NULL) < 0) {
-                VIR_WARN("Unable to remove disk metadata on "
-                         "vm %s from %s (disk target %s)",
-                         vm->def->name,
-                         NULLSTR(n->path),
-                         disk->dst);
-            }
-        }
+        qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->src);
     }
 
     /* Recompute the cached backing chain to match our
@@ -754,22 +736,12 @@ qemuBlockJobEventProcessLegacy(virQEMUDriverPtr driver,
     case VIR_DOMAIN_BLOCK_JOB_FAILED:
     case VIR_DOMAIN_BLOCK_JOB_CANCELED:
         if (disk->mirror) {
-            virStorageSourcePtr n;
-
             virDomainLockImageDetach(driver->lockManager, vm, disk->mirror);
 
             /* Ideally, we would restore seclabels on the backing chain here
              * but we don't know if somebody else is not using parts of it.
              * Remove security driver metadata so that they are not leaked. */
-            for (n = disk->mirror; virStorageSourceIsBacking(n); n = n->backingStore) {
-                if (qemuSecurityMoveImageMetadata(driver, vm, n, NULL) < 0) {
-                    VIR_WARN("Unable to remove disk metadata on "
-                             "vm %s from %s (disk target %s)",
-                             vm->def->name,
-                             NULLSTR(disk->src->path),
-                             disk->dst);
-                }
-            }
+            qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->mirror);
 
             virObjectUnref(disk->mirror);
             disk->mirror = NULL;
@@ -1177,7 +1149,6 @@ qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriverPtr driver,
                                            qemuBlockJobDataPtr job)
 {
     virDomainDiskDefPtr disk = job->disk;
-    virStorageSourcePtr n;
 
     VIR_DEBUG("active commit job '%s' on VM '%s' failed", job->name, vm->def->name);
 
@@ -1187,15 +1158,7 @@ qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriverPtr driver,
     /* Ideally, we would make the backing chain read only again (yes, SELinux
      * can do that using different labels). But that is not implemented yet and
      * not leaking security driver metadata is more important. */
-    for (n = disk->mirror; virStorageSourceIsBacking(n); n = n->backingStore) {
-        if (qemuSecurityMoveImageMetadata(driver, vm, n, NULL) < 0) {
-            VIR_WARN("Unable to remove disk metadata on "
-                     "vm %s from %s (disk target %s)",
-                     vm->def->name,
-                     NULLSTR(disk->src->path),
-                     disk->dst);
-        }
-    }
+    qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->mirror);
 
     virObjectUnref(disk->mirror);
     disk->mirror = NULL;