]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Introduce qemuBuildFSDevCommandLine
authorJohn Ferlan <jferlan@redhat.com>
Thu, 18 Feb 2016 15:06:14 +0000 (10:06 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Fri, 11 Mar 2016 11:31:05 +0000 (06:31 -0500)
Add new function to manage adding the -fsdev options to the
command line removing that task from the mainline qemuBuildCommandLine.
Alter the code slightly to perform the !caps and fsdev failure check
up front.

Since both qemuBuildFSStr and qemuBuildFSDevStr are local, make them
static and fix their prototypes to use the const virDomainDef as well.
Make some minor formatting changes for long lines.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_command.h

index 4333d46961d3938a5801393782e35f23352f5cb7..1ce6ae9f5b832bbee1ea707f81d136f1fc46aa86 100644 (file)
@@ -1982,8 +1982,9 @@ qemuBuildDiskDriveCommandLine(virCommandPtr cmd,
 }
 
 
-char *qemuBuildFSStr(virDomainFSDefPtr fs,
-                     virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED)
+static char *
+qemuBuildFSStr(virDomainFSDefPtr fs,
+               virQEMUCapsPtr qemuCaps)
 {
     virBuffer opt = VIR_BUFFER_INITIALIZER;
     const char *driver = qemuDomainFSDriverTypeToString(fs->fsdriver);
@@ -2056,8 +2057,8 @@ char *qemuBuildFSStr(virDomainFSDefPtr fs,
 }
 
 
-char *
-qemuBuildFSDevStr(virDomainDefPtr def,
+static char *
+qemuBuildFSDevStr(const virDomainDef *def,
                   virDomainFSDefPtr fs,
                   virQEMUCapsPtr qemuCaps)
 {
@@ -2075,7 +2076,8 @@ qemuBuildFSDevStr(virDomainDefPtr def,
         virBufferAddLit(&opt, "virtio-9p-pci");
 
     virBufferAsprintf(&opt, ",id=%s", fs->info.alias);
-    virBufferAsprintf(&opt, ",fsdev=%s%s", QEMU_FSDEV_HOST_PREFIX, fs->info.alias);
+    virBufferAsprintf(&opt, ",fsdev=%s%s",
+                      QEMU_FSDEV_HOST_PREFIX, fs->info.alias);
     virBufferAsprintf(&opt, ",mount_tag=%s", fs->dst);
 
     if (qemuBuildDeviceAddressStr(&opt, def, &fs->info, qemuCaps) < 0)
@@ -2092,6 +2094,40 @@ qemuBuildFSDevStr(virDomainDefPtr def,
 }
 
 
+static int
+qemuBuildFSDevCommandLine(virCommandPtr cmd,
+                          const virDomainDef *def,
+                          virQEMUCapsPtr qemuCaps)
+{
+    size_t i;
+
+    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_FSDEV) && def->nfss) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("filesystem passthrough not supported by this QEMU"));
+        return -1;
+    }
+
+    for (i = 0; i < def->nfss; i++) {
+        char *optstr;
+        virDomainFSDefPtr fs = def->fss[i];
+
+        virCommandAddArg(cmd, "-fsdev");
+        if (!(optstr = qemuBuildFSStr(fs, qemuCaps)))
+            return -1;
+        virCommandAddArg(cmd, optstr);
+        VIR_FREE(optstr);
+
+        virCommandAddArg(cmd, "-device");
+        if (!(optstr = qemuBuildFSDevStr(def, fs, qemuCaps)))
+            return -1;
+        virCommandAddArg(cmd, optstr);
+        VIR_FREE(optstr);
+    }
+
+    return 0;
+}
+
+
 static int
 qemuControllerModelUSBToCaps(int model)
 {
@@ -8013,30 +8049,8 @@ qemuBuildCommandLine(virConnectPtr conn,
                                       emitBootindex) < 0)
         goto error;
 
-    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_FSDEV)) {
-        for (i = 0; i < def->nfss; i++) {
-            char *optstr;
-            virDomainFSDefPtr fs = def->fss[i];
-
-            virCommandAddArg(cmd, "-fsdev");
-            if (!(optstr = qemuBuildFSStr(fs, qemuCaps)))
-                goto error;
-            virCommandAddArg(cmd, optstr);
-            VIR_FREE(optstr);
-
-            virCommandAddArg(cmd, "-device");
-            if (!(optstr = qemuBuildFSDevStr(def, fs, qemuCaps)))
-                goto error;
-            virCommandAddArg(cmd, optstr);
-            VIR_FREE(optstr);
-        }
-    } else {
-        if (def->nfss) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("filesystem passthrough not supported by this QEMU"));
-            goto error;
-        }
-    }
+    if (qemuBuildFSDevCommandLine(cmd, def, qemuCaps) < 0)
+        goto error;
 
     if (!def->nnets) {
         /* If we have -device, then we set -nodefault already */
index 95b54f283085c927faa74186d7dc3e59596bef6a..8167af8b9f05ccc617f09795ffc97ad370e5d642 100644 (file)
@@ -117,17 +117,13 @@ char *qemuBuildDriveStr(virConnectPtr conn,
                         virDomainDiskDefPtr disk,
                         bool bootable,
                         virQEMUCapsPtr qemuCaps);
-char *qemuBuildFSStr(virDomainFSDefPtr fs,
-                     virQEMUCapsPtr qemuCaps);
 
 /* Current, best practice */
 char *qemuBuildDriveDevStr(const virDomainDef *def,
                            virDomainDiskDefPtr disk,
                            int bootindex,
                            virQEMUCapsPtr qemuCaps);
-char *qemuBuildFSDevStr(virDomainDefPtr domainDef,
-                        virDomainFSDefPtr fs,
-                        virQEMUCapsPtr qemuCaps);
+
 /* Current, best practice */
 char *qemuBuildControllerDevStr(const virDomainDef *domainDef,
                                 virDomainControllerDefPtr def,