[libvirt RFCv8 13/27] qemu: saveimage: add multifd related fields to save format

Claudio Fontana cfontana at suse.de
Sat May 7 13:43:06 UTC 2022


add both multifd compression and number of multifd channels
fields in the same commit, in order to change the format to
version 3 in one go.

Signed-off-by: Claudio Fontana <cfontana at suse.de>
---
 src/qemu/qemu_saveimage.c | 19 ++++++++++++++++++-
 src/qemu/qemu_saveimage.h |  8 +++++---
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/src/qemu/qemu_saveimage.c b/src/qemu/qemu_saveimage.c
index 2a9ef622be..cb6efe2338 100644
--- a/src/qemu/qemu_saveimage.c
+++ b/src/qemu/qemu_saveimage.c
@@ -67,6 +67,23 @@ VIR_ENUM_IMPL(qemuSaveCompression,
               "lzop",
 );
 
+typedef enum {
+    QEMU_SAVE_MULTIFD_COMP_NONE = 0,
+    QEMU_SAVE_MULTIFD_COMP_ZLIB = 1,
+    QEMU_SAVE_MULTIFD_COMP_ZSTD = 2,
+
+    /* used for the on-disk format, do not change/re-use numbers */
+    QEMU_SAVE_MULTIFD_COMP_LAST
+} virQEMUSaveMultiFdComp;
+
+VIR_ENUM_DECL(qemuSaveMultiFdComp);
+VIR_ENUM_IMPL(qemuSaveMultiFdComp,
+              QEMU_SAVE_MULTIFD_COMP_LAST,
+              "none",
+              "zlib",
+              "zstd",
+);
+
 static inline void
 qemuSaveImageBswapHeader(virQEMUSaveHeader *hdr)
 {
@@ -784,7 +801,7 @@ qemuSaveImageStartVM(virConnectPtr conn,
                                  virDomainXMLOptionGetSaveCookie(driver->xmlopt)) < 0)
         goto cleanup;
 
-    if ((header->version == 2) &&
+    if ((header->version >= 2) &&
         (header->compressed != QEMU_SAVE_FORMAT_RAW)) {
         if (!(cmd = qemuSaveImageGetCompressionCommand(header->compressed)))
             goto cleanup;
diff --git a/src/qemu/qemu_saveimage.h b/src/qemu/qemu_saveimage.h
index b775c5eb08..356fc7561e 100644
--- a/src/qemu/qemu_saveimage.h
+++ b/src/qemu/qemu_saveimage.h
@@ -30,7 +30,7 @@
  */
 #define QEMU_SAVE_MAGIC   "LibvirtQemudSave"
 #define QEMU_SAVE_PARTIAL "LibvirtQemudPart"
-#define QEMU_SAVE_VERSION 2
+#define QEMU_SAVE_VERSION 3
 
 G_STATIC_ASSERT(sizeof(QEMU_SAVE_MAGIC) == sizeof(QEMU_SAVE_PARTIAL));
 
@@ -42,8 +42,10 @@ struct _virQEMUSaveHeader {
     uint32_t was_running;
     uint32_t compressed;
     uint32_t cookieOffset;
-    uint32_t unused[14];
-};
+    uint16_t multifd_channels;
+    uint16_t multifd_comp;
+    uint32_t unused[13];
+} ATTRIBUTE_PACKED;
 
 
 typedef struct _virQEMUSaveData virQEMUSaveData;
-- 
2.35.3



More information about the libvir-list mailing list