@@ -2632,6 +2632,13 @@ qemuBuildFSStr(virDomainFSDefPtr fs)
} else if (fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_SQUASH) {
virBufferAddLit(&opt, ",security_model=none");
}
+ if (fs->multidevs == VIR_DOMAIN_FS_MULTIDEVS_REMAP) {
+ virBufferAddLit(&opt, ",multidevs=remap");
+ } else if (fs->multidevs == VIR_DOMAIN_FS_MULTIDEVS_FORBID) {
+ virBufferAddLit(&opt, ",multidevs=forbid");
+ } else if (fs->multidevs == VIR_DOMAIN_FS_MULTIDEVS_WARN) {
+ virBufferAddLit(&opt, ",multidevs=warn");
+ }
} else if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE) {
/* removed since qemu 4.0.0 see v3.1.0-29-g93aee84f57 */
virBufferAddLit(&opt, "handle");
@@ -8529,6 +8529,13 @@ qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
_("only supports mount filesystem type"));
return -1;
}
+ if (fs->multidevs != VIR_DOMAIN_FS_MODEL_DEFAULT &&
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTFS_MULTIDEVS))
+ {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("multidevs is not supported with this QEMU binary"));
+ return -1;
+ }
switch ((virDomainFSDriverType) fs->fsdriver) {
case VIR_DOMAIN_FS_DRIVER_TYPE_DEFAULT:
@@ -8581,6 +8588,11 @@ qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
_("virtiofs is not supported with this QEMU binary"));
return -1;
}
+ if (fs->multidevs != VIR_DOMAIN_FS_MULTIDEVS_DEFAULT) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("virtiofs does not support multidevs"));
+ return -1;
+ }
if (qemuDomainDefValidateVirtioFSSharedMemory(def) < 0)
return -1;
break;
This option prevents misbehaviours on guest if a qemu 9pfs export contains multiple devices, due to the potential file ID collisions this otherwise may cause. Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com> --- src/qemu/qemu_command.c | 7 +++++++ src/qemu/qemu_domain.c | 12 ++++++++++++ 2 files changed, 19 insertions(+)