diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 28770188dd038086feae287b6e378267e9367e71..aad8d2ce8e4d9da03d6f619dfef15be2fa4536fb 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -3945,6 +3945,11 @@
<target dir='/import/from/host'/>
<readonly/>
</filesystem>
+ <filesystem type='mount' accessmode='passthrough'>
+ <driver type='virtiofs'/>
+ <source dir='/path'/>
+ <target dir='mount_tag'/>
+ </filesystem>
...
</devices>
...
@@ -3973,6 +3978,9 @@
while the value immediate
means that a host writeback
is immediately triggered for all pages touched during a guest file
write operation (since 0.9.10) .
+ Since 6.2.0 , type='virtiofs'
+ is also supported. Using virtiofs requires setting up shared memory,
+ see the guide: Virtio-FS
template
@@ -4008,7 +4016,9 @@
The filesystem element has an optional attribute accessmode
which specifies the security mode for accessing the source
(since 0.8.5) . Currently this only works
- with type='mount'
for the QEMU/KVM driver. The possible
+ with type='mount'
for the QEMU/KVM driver.
+ For driver type virtiofs
, only passthrough
is
+ supported. For other driver types, the possible
values are:
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 0e7b8d389ecb68c7d63fe17c6cfefc4c70d55eb5..fbe4c554a4fcfc998b2f63467445f993dbb690d8 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -2645,6 +2645,12 @@
+
+
+ virtiofs
+
+
+
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 17867eeece65c97f6fa728706db0e1a10a7f2150..1418d5828fd9b28e6fdd5b31d73232924556f1ec 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -477,6 +477,7 @@ VIR_ENUM_IMPL(virDomainFSDriver,
"loop",
"nbd",
"ploop",
+ "virtiofs",
);
VIR_ENUM_IMPL(virDomainFSAccessMode,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 4745d7c731f40ddd45431d2441dd3a38ad09f0f4..9921c25293dab3bd8608f3d2d1661eef8067aea3 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -774,6 +774,7 @@ typedef enum {
VIR_DOMAIN_FS_DRIVER_TYPE_LOOP,
VIR_DOMAIN_FS_DRIVER_TYPE_NBD,
VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP,
+ VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS,
VIR_DOMAIN_FS_DRIVER_TYPE_LAST
} virDomainFSDriverType;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 2ea13621db8f694ef023841e13b0395948620d69..8ad859ad88cb9dce1cdccd9df3ea043b15741467 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2681,6 +2681,10 @@ qemuBuildFilesystemCommandLine(virCommandPtr cmd,
return -1;
break;
+ case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
+ /* TODO: vhost-user-fs-pci */
+ break;
+
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 3dfa71650db1a1e5f5b91d62e29a3e55dd77ee23..e1ee8d4692c74016e38f49935e603848002e0f3f 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -8302,6 +8302,10 @@ qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
_("Filesystem driver type not supported"));
return -1;
+ case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
+ /* TODO: vhost-user-fs-pci */
+ return 0;
+
case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
default:
virReportEnumRangeError(virDomainFSDriverType, fs->fsdriver);
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index c7d8a3ac3ba1bcd4d9f7bb48eb2d03a3a70491b4..ab6bce19f4c7aec97d28d017b7064a082047e0dc 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -699,6 +699,10 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
}
break;
+ case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
+ /* vhost-user-fs-pci */
+ return virtioFlags;
+
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a6b6279fb8744652d5651309125a4af6f580a857
--- /dev/null
+++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
@@ -0,0 +1,39 @@
+
+ guest
+ 126f2720-6f8e-45ab-a886-ec9277079a67
+ 14680064
+ 14680064
+
+
+
+
+ 2
+
+ hvm
+
+
+
+ qemu64
+
+ |
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu-system-x86_64
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
new file mode 100644
index 0000000000000000000000000000000000000000..70df7b890d3b774a60e3ae33e39b81a070d88d68
--- /dev/null
+++ b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
@@ -0,0 +1,74 @@
+
+ guest
+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7
+ 4194304
+ 4194304
+
+
+
+
+
+
+ 2
+
+ hvm
+
+
+
+
+
+
+
+ qemu64
+
+ |
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu-system-x86_64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml b/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
new file mode 120000
index 0000000000000000000000000000000000000000..fbc552ef945155f8106407541a8ea5390be84a25
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
@@ -0,0 +1 @@
+../qemuxml2argvdata/vhost-user-fs-fd-memory.xml
\ No newline at end of file
diff --git a/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml b/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
new file mode 120000
index 0000000000000000000000000000000000000000..0c0f05b254bca31d8dbb4a147b9b4b4fc11ea8b5
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
@@ -0,0 +1 @@
+../qemuxml2argvdata/vhost-user-fs-hugepages.xml
\ No newline at end of file
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 914f50351640cbb2968df91985a982ba1e39772a..9b6a2357772149e3edb2314d71564177fe8901cc 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -1434,6 +1434,9 @@ mymain(void)
DO_TEST("vhost-vsock-ccw-auto", QEMU_CAPS_DEVICE_VHOST_VSOCK,
QEMU_CAPS_CCW);
+ DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
+ DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");
+
DO_TEST("riscv64-virt",
QEMU_CAPS_DEVICE_VIRTIO_MMIO);
DO_TEST("riscv64-virt-pci",