c8c376
From 6a085ddb32e48aad09d6a831c02bfd531ac048af Mon Sep 17 00:00:00 2001
c8c376
Message-Id: <6a085ddb32e48aad09d6a831c02bfd531ac048af@dist-git>
c8c376
From: Michal Privoznik <mprivozn@redhat.com>
c8c376
Date: Tue, 8 Nov 2016 13:42:10 +0100
c8c376
Subject: [PATCH] qemuBuildVhostuserCommandLine: Reuse qemuBuildChrChardevStr
c8c376
c8c376
RHEL-7.3: https://bugzilla.redhat.com/show_bug.cgi?id=1366108
c8c376
RHEL-7.3.z: https://bugzilla.redhat.com/show_bug.cgi?id=1392032
c8c376
c8c376
There's no need to reinvent the wheel here. We already have a
c8c376
function to format virDomainChrSourceDefPtr. It's called
c8c376
qemuBuildChrChardevStr(). Use that instead of some dummy
c8c376
virBufferAsprintf().
c8c376
c8c376
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
c8c376
(cherry picked from commit 0c61cf315859a74326da93bbb6f04a08509ef91e)
c8c376
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
c8c376
---
c8c376
 src/qemu/qemu_command.c | 45 ++++++++++++++++++++++++++-------------------
c8c376
 1 file changed, 26 insertions(+), 19 deletions(-)
c8c376
c8c376
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
c8c376
index d28a367cc..b99fb7a8f 100644
c8c376
--- a/src/qemu/qemu_command.c
c8c376
+++ b/src/qemu/qemu_command.c
c8c376
@@ -7908,13 +7908,16 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg,
c8c376
 }
c8c376
 
c8c376
 static int
c8c376
-qemuBuildVhostuserCommandLine(virCommandPtr cmd,
c8c376
+qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver,
c8c376
+                              virLogManagerPtr logManager,
c8c376
+                              virCommandPtr cmd,
c8c376
                               virDomainDefPtr def,
c8c376
                               virDomainNetDefPtr net,
c8c376
                               virQEMUCapsPtr qemuCaps,
c8c376
                               unsigned int bootindex)
c8c376
 {
c8c376
-    virBuffer chardev_buf = VIR_BUFFER_INITIALIZER;
c8c376
+    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
c8c376
+    char *chardev = NULL;
c8c376
     virBuffer netdev_buf = VIR_BUFFER_INITIALIZER;
c8c376
     unsigned int queues = net->driver.virtio.queues;
c8c376
     char *nic = NULL;
c8c376
@@ -7927,9 +7930,10 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd,
c8c376
 
c8c376
     switch ((virDomainChrType) net->data.vhostuser->type) {
c8c376
     case VIR_DOMAIN_CHR_TYPE_UNIX:
c8c376
-        virBufferAsprintf(&chardev_buf, "socket,id=char%s,path=%s%s",
c8c376
-                          net->info.alias, net->data.vhostuser->data.nix.path,
c8c376
-                          net->data.vhostuser->data.nix.listen ? ",server" : "");
c8c376
+        if (!(chardev = qemuBuildChrChardevStr(logManager, cmd, cfg, def,
c8c376
+                                               net->data.vhostuser,
c8c376
+                                               net->info.alias, qemuCaps, false)))
c8c376
+            goto error;
c8c376
         break;
c8c376
 
c8c376
     case VIR_DOMAIN_CHR_TYPE_NULL:
c8c376
@@ -7947,7 +7951,7 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd,
c8c376
     case VIR_DOMAIN_CHR_TYPE_LAST:
c8c376
         virReportError(VIR_ERR_INTERNAL_ERROR,
c8c376
                        _("vhost-user type '%s' not supported"),
c8c376
-                        virDomainChrTypeToString(net->data.vhostuser->type));
c8c376
+                       virDomainChrTypeToString(net->data.vhostuser->type));
c8c376
         goto error;
c8c376
     }
c8c376
 
c8c376
@@ -7965,7 +7969,8 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd,
c8c376
     }
c8c376
 
c8c376
     virCommandAddArg(cmd, "-chardev");
c8c376
-    virCommandAddArgBuffer(cmd, &chardev_buf);
c8c376
+    virCommandAddArg(cmd, chardev);
c8c376
+    VIR_FREE(chardev);
c8c376
 
c8c376
     virCommandAddArg(cmd, "-netdev");
c8c376
     virCommandAddArgBuffer(cmd, &netdev_buf);
c8c376
@@ -7979,11 +7984,13 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd,
c8c376
 
c8c376
     virCommandAddArgList(cmd, "-device", nic, NULL);
c8c376
     VIR_FREE(nic);
c8c376
+    virObjectUnref(cfg);
c8c376
 
c8c376
     return 0;
c8c376
 
c8c376
  error:
c8c376
-    virBufferFreeAndReset(&chardev_buf);
c8c376
+    virObjectUnref(cfg);
c8c376
+    VIR_FREE(chardev);
c8c376
     virBufferFreeAndReset(&netdev_buf);
c8c376
     VIR_FREE(nic);
c8c376
 
c8c376
@@ -7991,8 +7998,9 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd,
c8c376
 }
c8c376
 
c8c376
 static int
c8c376
-qemuBuildInterfaceCommandLine(virCommandPtr cmd,
c8c376
-                              virQEMUDriverPtr driver,
c8c376
+qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver,
c8c376
+                              virLogManagerPtr logManager,
c8c376
+                              virCommandPtr cmd,
c8c376
                               virDomainDefPtr def,
c8c376
                               virDomainNetDefPtr net,
c8c376
                               virQEMUCapsPtr qemuCaps,
c8c376
@@ -8012,7 +8020,6 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd,
c8c376
     char **tapfdName = NULL;
c8c376
     char **vhostfdName = NULL;
c8c376
     virDomainNetType actualType = virDomainNetGetActualType(net);
c8c376
-    virQEMUDriverConfigPtr cfg = NULL;
c8c376
     virNetDevBandwidthPtr actualBandwidth;
c8c376
     size_t i;
c8c376
 
c8c376
@@ -8055,8 +8062,6 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd,
c8c376
         return -1;
c8c376
     }
c8c376
 
c8c376
-    cfg = virQEMUDriverGetConfig(driver);
c8c376
-
c8c376
     switch (actualType) {
c8c376
     case VIR_DOMAIN_NET_TYPE_NETWORK:
c8c376
     case VIR_DOMAIN_NET_TYPE_BRIDGE:
c8c376
@@ -8116,7 +8121,8 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd,
c8c376
         break;
c8c376
 
c8c376
     case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
c8c376
-        ret = qemuBuildVhostuserCommandLine(cmd, def, net, qemuCaps, bootindex);
c8c376
+        ret = qemuBuildVhostuserCommandLine(driver, logManager, cmd, def,
c8c376
+                                            net, qemuCaps, bootindex);
c8c376
         goto cleanup;
c8c376
         break;
c8c376
 
c8c376
@@ -8289,7 +8295,6 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd,
c8c376
     VIR_FREE(host);
c8c376
     VIR_FREE(tapfdName);
c8c376
     VIR_FREE(vhostfdName);
c8c376
-    virObjectUnref(cfg);
c8c376
     return ret;
c8c376
 }
c8c376
 
c8c376
@@ -8299,8 +8304,9 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd,
c8c376
  *       API domainSetSecurityTapFDLabel that doesn't use the const format.
c8c376
  */
c8c376
 static int
c8c376
-qemuBuildNetCommandLine(virCommandPtr cmd,
c8c376
-                        virQEMUDriverPtr driver,
c8c376
+qemuBuildNetCommandLine(virQEMUDriverPtr driver,
c8c376
+                        virLogManagerPtr logManager,
c8c376
+                        virCommandPtr cmd,
c8c376
                         virDomainDefPtr def,
c8c376
                         virQEMUCapsPtr qemuCaps,
c8c376
                         virNetDevVPortProfileOp vmop,
c8c376
@@ -8339,7 +8345,7 @@ qemuBuildNetCommandLine(virCommandPtr cmd,
c8c376
             else
c8c376
                 vlan = i;
c8c376
 
c8c376
-            if (qemuBuildInterfaceCommandLine(cmd, driver, def, net,
c8c376
+            if (qemuBuildInterfaceCommandLine(driver, logManager, cmd, def, net,
c8c376
                                               qemuCaps, vlan, bootNet, vmop,
c8c376
                                               standalone, nnicindexes,
c8c376
                                               nicindexes) < 0)
c8c376
@@ -9672,7 +9678,8 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
c8c376
     if (qemuBuildFSDevCommandLine(cmd, def, qemuCaps) < 0)
c8c376
         goto error;
c8c376
 
c8c376
-    if (qemuBuildNetCommandLine(cmd, driver, def, qemuCaps, vmop, standalone,
c8c376
+    if (qemuBuildNetCommandLine(driver, logManager, cmd, def,
c8c376
+                                qemuCaps, vmop, standalone,
c8c376
                                 emitBootindex, nnicindexes, nicindexes,
c8c376
                                 &bootHostdevNet) < 0)
c8c376
         goto error;
c8c376
-- 
c8c376
2.11.0
c8c376