]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fall back to QEMUD_SAVE_FORMAT_RAW if compression method fails.
authorHu Tao <hutao@cn.fujitsu.com>
Tue, 30 Nov 2010 07:12:54 +0000 (15:12 +0800)
committerEric Blake <eblake@redhat.com>
Tue, 30 Nov 2010 21:22:53 +0000 (14:22 -0700)
When dumping a domain, it's reasonable to save dump-file in raw format
if dump format is misconfigured or the corresponding compress program
is not available rather then fail dumping.

AUTHORS
src/qemu/qemu_driver.c

diff --git a/AUTHORS b/AUTHORS
index 16c755daa1a7f4440008a56da1fa7f1716de3e56..ca2414c03338ef1e0abf1edbd0d3cf2c58046d8b 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -136,6 +136,7 @@ Patches have also been contributed by:
   Osier Yang           <jyang@redhat.com>
   Kamezawa Hiroyuki    <kamezawa.hiroyu@jp.fujitsu.com>
   Wen Congyang         <wency@cn.fujitsu.com>
+  Hu Tao               <hutao@cn.fujitsu.com>
 
   [....send patches to get your name here....]
 
index 4877692e86a6397952e146ff591f944029303736..fcb90a36356cb459bdebe6af3e27f46ee78dde07 100644 (file)
@@ -6057,36 +6057,46 @@ cleanup:
     return ret;
 }
 
-static int qemudDomainCoreDump(virDomainPtr dom,
-                               const char *path,
-                               int flags ATTRIBUTE_UNUSED) {
-    struct qemud_driver *driver = dom->conn->privateData;
-    virDomainObjPtr vm;
-    int resume = 0, paused = 0;
-    int ret = -1, fd = -1;
-    virDomainEventPtr event = NULL;
-    int compress;
-    qemuDomainObjPrivatePtr priv;
+static enum qemud_save_formats
+getCompressionType(struct qemud_driver *driver)
+{
+    int compress = QEMUD_SAVE_FORMAT_RAW;
+
     /*
      * We reuse "save" flag for "dump" here. Then, we can support the same
      * format in "save" and "dump".
      */
-    compress = QEMUD_SAVE_FORMAT_RAW;
     if (driver->dumpImageFormat) {
         compress = qemudSaveCompressionTypeFromString(driver->dumpImageFormat);
         if (compress < 0) {
-           qemuReportError(VIR_ERR_OPERATION_FAILED, "%s",
-                           _("Invalid dump image format specified in "
-                             "configuration file"));
-           return -1;
+            qemuReportError(VIR_ERR_OPERATION_FAILED, "%s",
+                            _("Invalid dump image format specified in "
+                              "configuration file, using raw"));
+            return QEMUD_SAVE_FORMAT_RAW;
         }
         if (!qemudCompressProgramAvailable(compress)) {
             qemuReportError(VIR_ERR_OPERATION_FAILED,
                             "%s", _("Compression program for dump image format "
-                                    "in configuration file isn't available"));
-            return -1;
+                                    "in configuration file isn't available, "
+                                    "using raw"));
+            return QEMUD_SAVE_FORMAT_RAW;
         }
     }
+    return compress;
+}
+
+static int qemudDomainCoreDump(virDomainPtr dom,
+                               const char *path,
+                               int flags ATTRIBUTE_UNUSED) {
+    struct qemud_driver *driver = dom->conn->privateData;
+    virDomainObjPtr vm;
+    int resume = 0, paused = 0;
+    int ret = -1, fd = -1;
+    virDomainEventPtr event = NULL;
+    enum qemud_save_formats compress;
+    qemuDomainObjPrivatePtr priv;
+
+    compress = getCompressionType(driver);
 
     qemuDriverLock(driver);
     vm = virDomainFindByUUID(&driver->domains, dom->uuid);