[libvirt] [PATCH] qemu: Run lzop with '--ignore-warn'

Michal Privoznik mprivozn at redhat.com
Tue Feb 19 17:12:13 UTC 2013


Currently, if lzop decompression binary produces a warning, it
doesn't exit with zero status but 2 instead. Terrifying, but
true. However, warnings may be ignored using '--ignore-warn'
command line argument.  Moreover, in which case, the exit status
will be zero.
---
 src/qemu/qemu_driver.c | 68 ++++++++++++++++++++++++++++++++++----------------
 1 file changed, 46 insertions(+), 22 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index dc35b91..41c6168 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2507,6 +2507,36 @@ qemuCompressProgramName(int compress)
             qemuSaveCompressionTypeToString(compress));
 }
 
+static virCommandPtr
+qemuCompressGetCommand(virQEMUSaveFormat compression)
+{
+    virCommandPtr ret = NULL;
+    const char *prog = qemuSaveCompressionTypeToString(compression);
+
+    if (!prog) {
+        virReportError(VIR_ERR_OPERATION_FAILED,
+                       _("Invalid compressed save format %d"),
+                       compression);
+        return NULL;
+    }
+
+    if (!(ret = virCommandNew(prog))) {
+        virReportOOMError();
+        return NULL;
+    }
+
+    switch (compression) {
+    case QEMU_SAVE_FORMAT_LZOP:
+        virCommandAddArg(ret, "--ignore-warn");
+        break;
+    default:
+        /* Don't add nothing for now */
+        break;
+    }
+
+    return ret;
+}
+
 /* Internal function to properly create or open existing files, with
  * ownership affected by qemu driver setup.  */
 static int
@@ -4775,32 +4805,26 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;
 
-    if (header->version == 2) {
-        const char *prog = qemuSaveCompressionTypeToString(header->compressed);
-        if (prog == NULL) {
-            virReportError(VIR_ERR_OPERATION_FAILED,
-                           _("Invalid compressed save format %d"),
-                           header->compressed);
+    if ((header->version == 2) &&
+        (header->compressed != QEMU_SAVE_FORMAT_RAW)) {
+        if (!(cmd = qemuCompressGetCommand(header->compressed)))
             goto cleanup;
-        }
 
-        if (header->compressed != QEMU_SAVE_FORMAT_RAW) {
-            cmd = virCommandNewArgList(prog, "-dc", NULL);
-            intermediatefd = *fd;
-            *fd = -1;
+        intermediatefd = *fd;
+        *fd = -1;
 
-            virCommandSetInputFD(cmd, intermediatefd);
-            virCommandSetOutputFD(cmd, fd);
-            virCommandSetErrorBuffer(cmd, &errbuf);
-            virCommandDoAsyncIO(cmd);
+        virCommandAddArg(cmd, "-dc");
+        virCommandSetInputFD(cmd, intermediatefd);
+        virCommandSetOutputFD(cmd, fd);
+        virCommandSetErrorBuffer(cmd, &errbuf);
+        virCommandDoAsyncIO(cmd);
 
-            if (virCommandRunAsync(cmd, NULL) < 0) {
-                virReportError(VIR_ERR_INTERNAL_ERROR,
-                               _("Failed to start decompression binary %s"),
-                               prog);
-                *fd = intermediatefd;
-                goto cleanup;
-            }
+        if (virCommandRunAsync(cmd, NULL) < 0) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           _("Failed to start decompression binary %s"),
+                           qemuCompressProgramName(header->compressed));
+            *fd = intermediatefd;
+            goto cleanup;
         }
     }
 
-- 
1.8.1.2




More information about the libvir-list mailing list