On 7/17/25 2:03 AM, Markus Armbruster wrote: > Brian Song <hibrians...@gmail.com> writes: > >> This work provides an initial implementation of fuse-over-io_uring >> support for QEMU export. According to the fuse-over-io_uring protocol >> specification, the userspace side must create the same number of queues >> as the number of CPUs (nr_cpu), just like the kernel. Currently, each >> queue contains only a single SQE entry, which is used to validate the >> correctness of the fuse-over-io_uring functionality. >> >> All FUSE read and write operations interact with the kernel via io >> vectors embedded in the SQE entry during submission and CQE fetching. >> The req_header and op_payload members of each entry are included as >> parts of the io vector: req_header carries the FUSE operation header, >> and op_payload carries the data payload, such as file attributes in a >> getattr reply, file content in a read reply, or file content being >> written to the FUSE client in a write operation. >> >> At present, multi-threading support is still incomplete. In addition, >> handling connection termination and managing the "drained" state of a >> FUSE block export in QEMU remain as pending work. >> >> Suggested-by: Kevin Wolf <kw...@redhat.com> >> Suggested-by: Stefan Hajnoczi <stefa...@redhat.com> >> Signed-off-by: Brian Song <hibrians...@gmail.com> > > [...] > >> diff --git a/docs/tools/qemu-storage-daemon.rst >> b/docs/tools/qemu-storage-daemon.rst >> index 35ab2d7807..4ec0648e95 100644 >> --- a/docs/tools/qemu-storage-daemon.rst >> +++ b/docs/tools/qemu-storage-daemon.rst >> @@ -78,7 +78,7 @@ Standard options: >> .. option:: --export >> [type=]nbd,id=<id>,node-name=<node-name>[,name=<export-name>][,writable=on|off][,bitmap=<name>] >> --export >> [type=]vhost-user-blk,id=<id>,node-name=<node-name>,addr.type=unix,addr.path=<socket-path>[,writable=on|off][,logical-block-size=<block-size>][,num-queues=<num-queues>] >> --export >> [type=]vhost-user-blk,id=<id>,node-name=<node-name>,addr.type=fd,addr.str=<fd>[,writable=on|off][,logical-block-size=<block-size>][,num-queues=<num-queues>] >> - --export >> [type=]fuse,id=<id>,node-name=<node-name>,mountpoint=<file>[,growable=on|off][,writable=on|off][,allow-other=on|off|auto] >> + --export >> [type=]fuse,id=<id>,node-name=<node-name>,mountpoint=<file>[,growable=on|off][,writable=on|off][,allow-other=on|off|auto][,uring=on|off] >> --export >> [type=]vduse-blk,id=<id>,node-name=<node-name>,name=<vduse-name>[,writable=on|off][,num-queues=<num-queues>][,queue-size=<queue-size>][,logical-block-size=<block-size>][,serial=<serial-number>] >> >> is a block export definition. ``node-name`` is the block node that >> should be >> @@ -111,7 +111,13 @@ Standard options: >> that enabling this option as a non-root user requires enabling the >> user_allow_other option in the global fuse.conf configuration file. >> Setting >> ``allow-other`` to auto (the default) will try enabling this option, and >> on >> - error fall back to disabling it. >> + error fall back to disabling it. Once ``uring`` is enabled >> + (off by default), the initialization of FUSE-over-io_uring-related >> settings >> + will be performed in the FUSE_INIT request handler. This setup bypasses >> + the traditional /dev/fuse communication mechanism and instead uses >> io_uring >> + for handling FUSE operations. >> + >> + > > Drop the additional blank lines, please. > > This is user-facing documentation. Do users care about "the FUSE_INIT > request handler"? > >> >> The ``vduse-blk`` export type takes a ``name`` (must be unique across >> the host) >> to create the VDUSE device. >> diff --git a/qapi/block-export.json b/qapi/block-export.json >> index 9ae703ad01..7d14f3f1ba 100644 >> --- a/qapi/block-export.json >> +++ b/qapi/block-export.json >> @@ -184,12 +184,16 @@ >> # mount the export with allow_other, and if that fails, try again >> # without. (since 6.1; default: auto) >> # >> +# @uring: If we enable uring option, it will enable FUSE over io_uring >> +# feature for QEMU FUSE export. (default: false) >> +# > > Missing (since 10.2). > > Please format just like everywhere else: > > # @uring: If we enable uring option, it will enable FUSE over > # io_uring feature for QEMU FUSE export. (default: false) > > > Kernel documentation calls the thing "FUSE-over-io-uring": > https://docs.kernel.org/filesystems/fuse-io-uring.html > > The text feels awkward. Here's my attempt: > > # @uring: Use FUSE-over-io-uring. (since 10.2; default: false) >
Thanks for pointing them out! I've fixed them. :)