Blame SOURCES/kvm-migration-Avoid-false-positive-on-non-supported-scen.patch

29b115
From 0753565af588dfa78b3529e359b1590e15fcbdb3 Mon Sep 17 00:00:00 2001
29b115
From: Leonardo Bras <leobras@redhat.com>
29b115
Date: Tue, 19 Jul 2022 09:23:45 -0300
29b115
Subject: [PATCH 04/11] migration: Avoid false-positive on non-supported
29b115
 scenarios for zero-copy-send
29b115
MIME-Version: 1.0
29b115
Content-Type: text/plain; charset=UTF-8
29b115
Content-Transfer-Encoding: 8bit
29b115
29b115
RH-Author: Leonardo BrĂ¡s <leobras@redhat.com>
29b115
RH-MergeRequest: 111: zero-copy-send fixes & improvements
29b115
RH-Commit: [4/6] f5c7ed6710d92668acb81d0118a71fab0b4e3d43 (LeoBras/centos-qemu-kvm)
29b115
RH-Bugzilla: 2107466
29b115
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
29b115
RH-Acked-by: Thomas Huth <thuth@redhat.com>
29b115
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
29b115
29b115
Migration with zero-copy-send currently has it's limitations, as it can't
29b115
be used with TLS nor any kind of compression. In such scenarios, it should
29b115
output errors during parameter / capability setting.
29b115
29b115
But currently there are some ways of setting this not-supported scenarios
29b115
without printing the error message:
29b115
29b115
!) For 'compression' capability, it works by enabling it together with
29b115
zero-copy-send. This happens because the validity test for zero-copy uses
29b115
the helper unction migrate_use_compression(), which check for compression
29b115
presence in s->enabled_capabilities[MIGRATION_CAPABILITY_COMPRESS].
29b115
29b115
The point here is: the validity test happens before the capability gets
29b115
enabled. If all of them get enabled together, this test will not return
29b115
error.
29b115
29b115
In order to fix that, replace migrate_use_compression() by directly testing
29b115
the cap_list parameter migrate_caps_check().
29b115
29b115
2) For features enabled by parameters such as TLS & 'multifd_compression',
29b115
there was also a possibility of setting non-supported scenarios: setting
29b115
zero-copy-send first, then setting the unsupported parameter.
29b115
29b115
In order to fix that, also add a check for parameters conflicting with
29b115
zero-copy-send on migrate_params_check().
29b115
29b115
3) XBZRLE is also a compression capability, so it makes sense to also add
29b115
it to the list of capabilities which are not supported with zero-copy-send.
29b115
29b115
Fixes: 1abaec9a1b2c ("migration: Change zero_copy_send from migration parameter to migration capability")
29b115
Signed-off-by: Leonardo Bras <leobras@redhat.com>
29b115
Message-Id: <20220719122345.253713-1-leobras@redhat.com>
29b115
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
29b115
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
29b115
(cherry picked from commit 90eb69e4f1a16b388d0483543bf6bfc69a9966e4)
29b115
Signed-off-by: Leonardo Bras <leobras@redhat.com>
29b115
---
29b115
 migration/migration.c | 15 ++++++++++++++-
29b115
 1 file changed, 14 insertions(+), 1 deletion(-)
29b115
29b115
diff --git a/migration/migration.c b/migration/migration.c
29b115
index 3a3a7a4a50..343629d59c 100644
29b115
--- a/migration/migration.c
29b115
+++ b/migration/migration.c
29b115
@@ -1265,7 +1265,9 @@ static bool migrate_caps_check(bool *cap_list,
29b115
 #ifdef CONFIG_LINUX
29b115
     if (cap_list[MIGRATION_CAPABILITY_ZERO_COPY_SEND] &&
29b115
         (!cap_list[MIGRATION_CAPABILITY_MULTIFD] ||
29b115
-         migrate_use_compression() ||
29b115
+         cap_list[MIGRATION_CAPABILITY_COMPRESS] ||
29b115
+         cap_list[MIGRATION_CAPABILITY_XBZRLE] ||
29b115
+         migrate_multifd_compression() ||
29b115
          migrate_use_tls())) {
29b115
         error_setg(errp,
29b115
                    "Zero copy only available for non-compressed non-TLS multifd migration");
29b115
@@ -1502,6 +1504,17 @@ static bool migrate_params_check(MigrationParameters *params, Error **errp)
29b115
         error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: ");
29b115
         return false;
29b115
     }
29b115
+
29b115
+#ifdef CONFIG_LINUX
29b115
+    if (migrate_use_zero_copy_send() &&
29b115
+        ((params->has_multifd_compression && params->multifd_compression) ||
29b115
+         (params->has_tls_creds && params->tls_creds && *params->tls_creds))) {
29b115
+        error_setg(errp,
29b115
+                   "Zero copy only available for non-compressed non-TLS multifd migration");
29b115
+        return false;
29b115
+    }
29b115
+#endif
29b115
+
29b115
     return true;
29b115
 }
29b115
 
29b115
-- 
29b115
2.31.1
29b115