Add in the ability to specify compression flags from the
managed save API. We map these to the supported QEMU
compression flags internally.
Signed-off-by: Chris Lalancette <clalance(a)redhat.com>
---
include/libvirt/libvirt.h.in | 7 +++++++
src/qemu/qemu_driver.c | 25 +++++++++++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 2ff484d..e4e7c84 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -648,6 +648,13 @@ int virDomainRestore (virConnectPtr conn,
/*
* Managed domain save
*/
+typedef enum {
+ VIR_DOMAIN_SAVE_COMPRESS_RAW = 0,
+ VIR_DOMAIN_SAVE_COMPRESS_GZIP = 1 << 0,
+ VIR_DOMAIN_SAVE_COMPRESS_BZIP2 = 1 << 1,
+ VIR_DOMAIN_SAVE_COMPRESS_XZ = 1 << 2,
+ VIR_DOMAIN_SAVE_COMPRESS_LZOP = 1 << 3,
+} virDomainSaveCompression;
int virDomainManagedSave (virDomainPtr dom,
unsigned int flags);
int virDomainHasManagedSaveImage(virDomainPtr dom,
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index b72aace..637cf28 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -79,6 +79,7 @@
#include "domain_nwfilter.h"
#include "hooks.h"
#include "storage_file.h"
+#include "count-one-bits.h"
#define VIR_FROM_THIS VIR_FROM_QEMU
@@ -5588,7 +5589,28 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags)
int ret = -1;
int compressed;
- virCheckFlags(0, -1);
+ if (count_one_bits(flags) > 1) {
+ qemuReportError(VIR_ERR_OPERATION_INVALID,
+ _("Too many compression flags specified 0x%x"),
flags);
+ return -1;
+ }
+
+ /* this is in lieu of virCheckFlags */
+ if (flags == 0)
+ compressed = QEMUD_SAVE_FORMAT_RAW;
+ else if (flags & VIR_DOMAIN_SAVE_COMPRESS_GZIP)
+ compressed = QEMUD_SAVE_FORMAT_GZIP;
+ else if (flags & VIR_DOMAIN_SAVE_COMPRESS_BZIP2)
+ compressed = QEMUD_SAVE_FORMAT_BZIP2;
+ else if (flags & VIR_DOMAIN_SAVE_COMPRESS_XZ)
+ compressed = QEMUD_SAVE_FORMAT_XZ;
+ else if (flags & VIR_DOMAIN_SAVE_COMPRESS_LZOP)
+ compressed = QEMUD_SAVE_FORMAT_LZOP;
+ else {
+ qemuReportError(VIR_ERR_OPERATION_INVALID,
+ _("Invalid compression flags 0x%x"), flags);
+ return -1;
+ }
qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
@@ -5606,7 +5628,6 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags)
VIR_DEBUG("Saving state to %s", name);
- compressed = QEMUD_SAVE_FORMAT_RAW;
ret = qemudDomainSaveFlag(driver, dom, vm, name, compressed);
cleanup:
--
1.7.2.1