| From: |
| Joanne Koong <joannelkoong-AT-gmail.com> |
| To: |
| miklos-AT-szeredi.hu, axboe-AT-kernel.dk |
| Subject: |
| [PATCH v2 0/8] fuse: support io-uring registered buffers |
| Date: |
| Mon, 27 Oct 2025 15:27:59 -0700 |
| Message-ID: |
| <20251027222808.2332692-1-joannelkoong@gmail.com> |
| Cc: |
| linux-fsdevel-AT-vger.kernel.org, bschubert-AT-ddn.com, asml.silence-AT-gmail.com, io-uring-AT-vger.kernel.org, xiaobing.li-AT-samsung.com, csander-AT-purestorage.com, kernel-team-AT-meta.com |
| Archive-link: |
| Article |
This patchset adds fuse support for io-uring registered buffers.
Daemons may register buffers ahead of time, which will eliminate the overhead
of pinning/unpinning user pages and translating virtual addresses for every
server-kernel interaction.
The main logic for fuse registered buffers is in the last patch (patch 8/8).
Patch 1/8 adds an io_uring api for fetching the registered buffer and patches
(2-7)/8 refactors the fuse io_uring code, which additionally will make adding
in the logic for registered buffers neater.
The libfuse changes can be found in this branch:
https://github.com/joannekoong/libfuse/tree/registered_bu.... The libfuse
implementation first tries registered buffers during registration and if this
fails, will retry with non-registered buffers. This prevents having to add a
new init flag (but does have the downside of printing dmesg errors for the
failed registrations when trying the registered buffers). If using registered
buffers and the daemon for whatever reason unregisters the buffers midway
through, then this will sever server-kernel communication. Libfuse will never
do this. Libfuse will only unregister the buffers when the entire session is
being destroyed.
Benchmarks will be run and posted.
Thanks,
Joanne
v1: https://lore.kernel.org/linux-fsdevel/20251022202021.3649...
v1 -> v2:
* Add io_uring_cmd_import_fixed_full() patch
* Construct iter using io_uring_cmd_import_fixed_full() per cmd instead of recyling
iters.
* Kmap the header instead of using bvec iter for iterating/copying. This makes
the code easier to read.
Joanne Koong (8):
io_uring/uring_cmd: add io_uring_cmd_import_fixed_full()
fuse: refactor io-uring logic for getting next fuse request
fuse: refactor io-uring header copying to ring
fuse: refactor io-uring header copying from ring
fuse: use enum types for header copying
fuse: add user_ prefix to userspace headers and payload fields
fuse: refactor setting up copy state for payload copying
fuse: support io-uring registered buffers
fs/fuse/dev_uring.c | 366 +++++++++++++++++++++++++----------
fs/fuse/dev_uring_i.h | 27 ++-
include/linux/io_uring/cmd.h | 3 +
io_uring/rsrc.c | 14 ++
io_uring/rsrc.h | 2 +
io_uring/uring_cmd.c | 13 ++
6 files changed, 316 insertions(+), 109 deletions(-)
--
2.47.3