[libvirt] [PATCH 3/3] qemu: Process new mode='append' for char dev with output to a file

Dmitry Mishin dim at virtuozzo.com
Wed Dec 23 13:01:25 UTC 2015


By default, QEMU truncates serial file on open. Sometimes, it could be weird -
for example, when we are trying to investigate some event, which occured several
restarts ago. This patch adds an ability to preserve previous content.

Signed-off-by: Dmitry Mishin <dim at virtuozzo.com>
---
 src/qemu/qemu_capabilities.c                 |  2 ++
 src/qemu/qemu_capabilities.h                 |  1 +
 src/qemu/qemu_command.c                      | 10 ++++++++++
 tests/qemucapabilitiesdata/caps_2.6.0-1.caps |  1 +
 4 files changed, 14 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 6e5d203..7b30441 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -308,6 +308,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
 
               "virtio-tablet", /* 205 */
               "virtio-input-host",
+              "chardev-file-append",
     );
 
 
@@ -2600,6 +2601,7 @@ static struct virQEMUCapsCommandLineProps virQEMUCapsCommandLine[] = {
     { "drive", "throttling.bps-total-max", QEMU_CAPS_DRIVE_IOTUNE_MAX},
     { "machine", "aes-key-wrap", QEMU_CAPS_AES_KEY_WRAP },
     { "machine", "dea-key-wrap", QEMU_CAPS_DEA_KEY_WRAP },
+    { "chardev", "append", QEMU_CAPS_CHARDEV_FILE_APPEND },
 };
 
 static int
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 61d6379..c148f2d 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -335,6 +335,7 @@ typedef enum {
     /* 205 */
     QEMU_CAPS_VIRTIO_TABLET, /* -device virtio-tablet-{device,pci} */
     QEMU_CAPS_VIRTIO_INPUT_HOST, /* -device virtio-input-host-{device,pci} */
+    QEMU_CAPS_CHARDEV_FILE_APPEND, /* -chardev file,append=on|off */
 
     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 9822cf7..d401981 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6555,6 +6555,16 @@ qemuBuildChrChardevStr(virDomainChrSourceDefPtr dev, const char *alias,
     case VIR_DOMAIN_CHR_TYPE_FILE:
         virBufferAsprintf(&buf, "file,id=char%s,path=%s", alias,
                           dev->data.file.path);
+        if (dev->data.file.append) {
+            if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FILE_APPEND)) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("append not supported in this QEMU binary"));
+                goto error;
+            }
+
+            virBufferAsprintf(&buf, ",append=%s",
+                              virTristateSwitchTypeToString(dev->data.file.append));
+        }
         break;
 
     case VIR_DOMAIN_CHR_TYPE_PIPE:
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-1.caps b/tests/qemucapabilitiesdata/caps_2.6.0-1.caps
index d9a8f3f..e296efc 100644
--- a/tests/qemucapabilitiesdata/caps_2.6.0-1.caps
+++ b/tests/qemucapabilitiesdata/caps_2.6.0-1.caps
@@ -169,4 +169,5 @@
     <flag name='virtio-mouse'/>
     <flag name='virtio-tablet'/>
     <flag name='virtio-input-host'/>
+    <flag name='chardev-file-append'/>
   </qemuCaps>
-- 
1.8.3.1




More information about the libvir-list mailing list