This RFC patch represents an initial implementation of the FUSE-over- io_uring Exports idea proposed for Google Summer of Code (2025) under the QEMU community: https://wiki.qemu.org/Google_Summer_of_Code_2025#FUSE-over-io_uring_exports
The implementation approach is primarily borrowed from how libfuse interacts with the kernel. FUSE-over-io_uring (https://docs.kernel.org/next/filesystems/fuse-io- uring.html) has been officially merged into the Linux kernel. The idea is to replace the traditional /dev/fuse based communication with a more efficient io_uring-based approach. In this model, userspace registers io_uring SQEs via the FUSE_IO_URING_CMD_REGISTER opcode, and then waits for the kernel to forward FUSE requests as CQEs. These are processed by the FUSE exports implementation in userspace and then committed back to the kernel using FUSE_IO_URING_CMD_COMMIT_AND_FETCH. To enable this feature in qemu-export-daemon, simply add the uring=on option to the export configuration. As this patch is still in the RFC stage, it currently supports **only single thread**. Due to protocol requirements in FUSE-over-io_uring, the number of FUSE threads must match the number of CPUs. Therefore, this initial version only works on single-core VMs (i.e., QEMU started with -smp 1) or single core machine. Brian Song (1): block/export: FUSE-over-io_uring Support for QEMU FUSE Exports block/export/fuse.c | 423 +++++++++++++++++++++++++-- docs/tools/qemu-storage-daemon.rst | 10 +- qapi/block-export.json | 6 +- storage-daemon/qemu-storage-daemon.c | 1 + util/fdmon-io_uring.c | 5 +- 5 files changed, 420 insertions(+), 25 deletions(-) -- 2.50.1