]> git.feebdaed.xyz Git - 0xmirror/libvirt.git/commitdiff
qemuMigrationSrcToFile: Don't cross-contaminate 'flags' variable
authorPeter Krempa <pkrempa@redhat.com>
Thu, 4 Dec 2025 16:40:33 +0000 (17:40 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 10 Dec 2025 10:07:34 +0000 (11:07 +0100)
The meaning of 'flags' is context dependant. 'qemuMigrationSrcToFile'
expects 'virDomainSaveRestoreFlags' rather than migration flags which is
not expected based on the location of the function.

Why this is wrong is clearly visible in 'doCoreDump' which passes in
'dump_flags' which are actually 'virDomainCoreDumpFlags' and the values
are different:

 VIR_DUMP_BYPASS_CACHE = (1 << 2)

 VIR_DOMAIN_SAVE_BYPASS_CACHE = 1 << 0

Since it checks only for VIR_DOMAIN_SAVE_BYPASS_CACHE pass it in as a
boolean instead.

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

index d88c0833ad1ed4b39a117390854cbafc1afc8fd4..cca9d06786c1ad511ca42d14a3071d7e6797d75c 100644 (file)
@@ -3137,7 +3137,9 @@ doCoreDump(virQEMUDriver *driver,
             goto cleanup;
 
         if (qemuMigrationSrcToFile(driver, vm, path, &fd, compressor,
-                                   dump_params, dump_flags, VIR_ASYNC_JOB_DUMP) < 0)
+                                   dump_params,
+                                   (dump_flags & VIR_DUMP_BYPASS_CACHE),
+                                   VIR_ASYNC_JOB_DUMP) < 0)
             goto cleanup;
     }
 
index 4f9b649b63efe3d9e6982ae5c90a8445144fc92a..137174252920f47bdda50fe97ff1bf6e81bd2370 100644 (file)
@@ -7210,7 +7210,7 @@ qemuMigrationSrcToSparseFile(virQEMUDriver *driver,
                              virDomainObj *vm,
                              const char *path,
                              int *fd,
-                             unsigned int flags,
+                             bool bypassCache,
                              virDomainAsyncJob asyncJob)
 {
     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
@@ -7222,7 +7222,7 @@ qemuMigrationSrcToSparseFile(virQEMUDriver *driver,
     /* When using directio with mapped-ram, qemu needs two fds. One with
      * O_DIRECT set writing the memory, and another without it set for
      * writing small bits of unaligned state. */
-    if ((flags & VIR_DOMAIN_SAVE_BYPASS_CACHE)) {
+    if (bypassCache) {
         directFlag = virFileDirectFdFlag();
         if (directFlag < 0) {
             virReportError(VIR_ERR_OPERATION_FAILED, "%s",
@@ -7259,7 +7259,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm,
                        int *fd,
                        virCommand *compressor,
                        qemuMigrationParams *migParams,
-                       unsigned int flags,
+                       bool bypassCache,
                        virDomainAsyncJob asyncJob)
 {
     qemuDomainObjPrivate *priv = vm->privateData;
@@ -7293,7 +7293,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm,
 
     if (migParams &&
         qemuMigrationParamsCapEnabled(migParams, QEMU_MIGRATION_CAP_MAPPED_RAM))
-        rc = qemuMigrationSrcToSparseFile(driver, vm, path, fd, flags, asyncJob);
+        rc = qemuMigrationSrcToSparseFile(driver, vm, path, fd, bypassCache, asyncJob);
     else
         rc = qemuMigrationSrcToLegacyFile(driver, vm, *fd, compressor, asyncJob);
 
index 50910ecb1f92f564a5bc27acf03d2a9de95b37b8..51341f453db030c38022a60c9a7687be657159f5 100644 (file)
@@ -244,7 +244,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver,
                        int *fd,
                        virCommand *compressor,
                        qemuMigrationParams *migParams,
-                       unsigned int flags,
+                       bool bypassCache,
                        virDomainAsyncJob asyncJob)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
 
index 58a3f96575125d6166989dd4c4ae10583570acdf..1b68a095952f6c7ec3eb4469f502d6cf59902d60 100644 (file)
@@ -501,7 +501,9 @@ qemuSaveImageCreate(virQEMUDriver *driver,
         goto cleanup;
 
     /* Perform the migration */
-    if (qemuMigrationSrcToFile(driver, vm, path, &fd, compressor, saveParams, flags, asyncJob) < 0)
+    if (qemuMigrationSrcToFile(driver, vm, path, &fd, compressor, saveParams,
+                               (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE),
+                               asyncJob) < 0)
         goto cleanup;
 
     /* Touch up file header to mark image complete. */