]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: use the vhost-user schemas to find binary
authorJán Tomko <jtomko@redhat.com>
Tue, 28 Jan 2020 14:38:52 +0000 (15:38 +0100)
committerJán Tomko <jtomko@redhat.com>
Wed, 4 Mar 2020 11:08:50 +0000 (12:08 +0100)
Look into /usr/share/qemu/vhost-user to see whether we can find
a suitable virtiofsd binary, in case the user did not provide one
in the domain XML.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Tested-by: Andrea Bolognani <abologna@redhat.com>
src/qemu/qemu_extdevice.c
src/qemu/qemu_vhost_user.c
src/qemu/qemu_vhost_user.h
src/qemu/qemu_virtiofs.c
src/qemu/qemu_virtiofs.h

index f66bafb62fee35e92850d00057fa2276b1c87110..07b9117f579bdf771f870812647b3e49e64ee51c 100644 (file)
@@ -105,6 +105,15 @@ qemuExtDevicesPrepareDomain(virQEMUDriverPtr driver,
         }
     }
 
+    for (i = 0; i < vm->def->nfss; i++) {
+        virDomainFSDefPtr fs = vm->def->fss[i];
+
+        if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
+            if (qemuVirtioFSPrepareDomain(driver, fs) < 0)
+                return -1;
+        }
+    }
+
     return ret;
 }
 
index 1bcb007a1ba46d55e83533542e26e09877d03e58..aee18c96706212077dcdab987c5bfbbfded1224d 100644 (file)
@@ -417,3 +417,42 @@ qemuVhostUserFillDomainGPU(virQEMUDriverPtr driver,
     VIR_FREE(vus);
     return ret;
 }
+
+
+int
+qemuVhostUserFillDomainFS(virQEMUDriverPtr driver,
+                          virDomainFSDefPtr fs)
+{
+    qemuVhostUserPtr *vus = NULL;
+    ssize_t nvus = 0;
+    ssize_t i;
+    int ret = -1;
+
+    if ((nvus = qemuVhostUserFetchParsedConfigs(driver->privileged,
+                                                &vus, NULL)) < 0)
+        goto end;
+
+    for (i = 0; i < nvus; i++) {
+        qemuVhostUserPtr vu = vus[i];
+
+        if (vu->type != QEMU_VHOST_USER_TYPE_FS)
+            continue;
+
+        fs->binary = g_strdup(vu->binary);
+        break;
+    }
+
+    if (i == nvus) {
+        virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+                       _("Unable to find a satisfying virtiofsd"));
+        goto end;
+    }
+
+    ret = 0;
+
+ end:
+    for (i = 0; i < nvus; i++)
+        qemuVhostUserFree(vus[i]);
+    g_free(vus);
+    return ret;
+}
index 369ba00caacce30964d4c7862004cc5d3c86d4d7..e505c8a4737f19f37c61531a43a56d43d86e6562 100644 (file)
@@ -45,3 +45,7 @@ qemuVhostUserFetchConfigs(char ***configs,
 int
 qemuVhostUserFillDomainGPU(virQEMUDriverPtr driver,
                            virDomainVideoDefPtr video);
+
+int
+qemuVhostUserFillDomainFS(virQEMUDriverPtr driver,
+                          virDomainFSDefPtr fs);
index 194855ece8614c6bf94b09ed0d9d0b51febd45a3..d579ce1d3396ba144be52562bedc24d4d1064ece 100644 (file)
@@ -28,6 +28,7 @@
 #include "qemu_conf.h"
 #include "qemu_extdevice.h"
 #include "qemu_security.h"
+#include "qemu_vhost_user.h"
 #include "qemu_virtiofs.h"
 #include "virpidfile.h"
 #include "virqemu.h"
@@ -325,3 +326,13 @@ qemuVirtioFSSetupCgroup(virDomainObjPtr vm,
 
     return 0;
 }
+
+int
+qemuVirtioFSPrepareDomain(virQEMUDriverPtr driver,
+                          virDomainFSDefPtr fs)
+{
+    if (fs->binary)
+        return 0;
+
+    return qemuVhostUserFillDomainFS(driver, fs);
+}
index 1db59917c6fd388ddb03dccb94dfecd8a153198f..7de4ea619087dad2a59d64cc875bcf5e635d4476 100644 (file)
@@ -40,3 +40,7 @@ int
 qemuVirtioFSSetupCgroup(virDomainObjPtr vm,
                         virDomainFSDefPtr fs,
                         virCgroupPtr cgroup);
+
+int
+qemuVirtioFSPrepareDomain(virQEMUDriverPtr driver,
+                          virDomainFSDefPtr fs);