[RFC PATCH v3 0/8] fuse: LOOKUP_HANDLE operation
From: Luis Henriques
Date: Wed Feb 25 2026 - 06:30:44 EST
Hi,
I'm sending a new version of my work on lookup_handle, even though it's
still incomplete. As suggested elsewhere, it is now based on compound
commands and thus it sits on top of Horst's patchset [0]. Also, because
this version is a complete re-write of the approach presented in my previous
RFC [1] I'm not going to detail what changed.
Here's a few notes:
- The code isn't yet fully testable as there are several pieces missing.
For example, the FUSE_TMPFILE and FUSE_READDIRPLUS operations are not yet
implemented. The NFS-related changes have also been dropped in this
revision.
- There are several details still to be sorted out in the compound
operations. For example, the nodeid for the statx operation in the
lookup+statx is set to FUSE_ROOT_ID.
- The second operation (mkobj_handle+statx+open) is still draft (or maybe
just wrong!). It's not handling flags correctly, and the error handling
has to be better thought out.
- Some of the patches in this set could probably be picked independently
(e.g. patch 4 or even patch 1)
So, why am I sending this broken and incomplete patchset? Well, simply
because I'd feel more confidence getting this approach validated. I don't
expect any through review, but I would appreciate feedback on anything that
would help me correct major flaws.
[0] https://lore.kernel.org/all/20260210-fuse-compounds-upstream-v5-0-ea0585f62daa@xxxxxxx
[1] https://lore.kernel.org/all/20251212181254.59365-1-luis@xxxxxxxxxx
Cheers,
--
Luis
Luis Henriques (8):
fuse: simplify fuse_lookup_name() interface
fuse: export extend_arg() and factor out fuse_ext_size()
fuse: store index of the variable length argument
fuse: drop unnecessary argument from fuse_lookup_init()
fuse: extract helper functions from fuse_do_statx()
fuse: implementation of lookup_handle+statx compound operation
fuse: export fuse_open_args_fill() helper function
fuse: implementation of mkobj_handle+statx+open compound operation
fs/fuse/compound.c | 1 +
fs/fuse/cuse.c | 1 +
fs/fuse/dev.c | 4 +-
fs/fuse/dir.c | 650 +++++++++++++++++++++++++++++++++-----
fs/fuse/file.c | 3 +-
fs/fuse/fuse_i.h | 42 ++-
fs/fuse/inode.c | 50 ++-
fs/fuse/ioctl.c | 1 +
fs/fuse/readdir.c | 2 +-
fs/fuse/virtio_fs.c | 6 +-
fs/fuse/xattr.c | 2 +
include/uapi/linux/fuse.h | 25 +-
12 files changed, 679 insertions(+), 108 deletions(-)