}
}
+ 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;
}
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;
+}
int
qemuVhostUserFillDomainGPU(virQEMUDriverPtr driver,
virDomainVideoDefPtr video);
+
+int
+qemuVhostUserFillDomainFS(virQEMUDriverPtr driver,
+ virDomainFSDefPtr fs);
#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"
return 0;
}
+
+int
+qemuVirtioFSPrepareDomain(virQEMUDriverPtr driver,
+ virDomainFSDefPtr fs)
+{
+ if (fs->binary)
+ return 0;
+
+ return qemuVhostUserFillDomainFS(driver, fs);
+}
qemuVirtioFSSetupCgroup(virDomainObjPtr vm,
virDomainFSDefPtr fs,
virCgroupPtr cgroup);
+
+int
+qemuVirtioFSPrepareDomain(virQEMUDriverPtr driver,
+ virDomainFSDefPtr fs);