Thanks all for the comments. I have a patchset ready that hopefully wraps together the extendability suggested by Nikolaus, that I agree is a good idea. The way I tried to make it more flexible is first of all transitioning to a ioctl(), as suggested by both Jann and Miklos, and by using a data structure with flexible array member. Thanks Amir for the fuse2 pointer. I didn't notice that project before, but I really enjoyed going through its code. I'm curious if it's intended to deprecate the current fuse implementation or is what the current fuse will converge to. I noticed that some good ideas that were in fuse2 have been also added to fuse, so I tried to take fuse2 as a reference for my passthrough ioctl(). Miklos, can you please give us a glimpse of what's the future of fuse2? Thanks a lot again for the feedback, I'll send the new patch in a few minutes. Cheers, Alessio On Mon, Aug 24, 2020 at 02:48:01PM +0200, Miklos Szeredi wrote: > On Wed, Aug 19, 2020 at 11:25 AM Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > > > What I have in mind is things like not coupling the setup of the > > > passthrough fds to open(), but having a separate notification message for > > > this (like what we use for invalidation of cache), and adding not just > > > an "fd" field but also "offset" and "length" fields (which would > > > currently be required to be both zero to get the "full file" semantics). > > > > > > > You mean like this? > > > > https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git/commit/?h=fuse2 > > Look specifically at fuse_file_map_iter(): > > https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git/tree/fs/fuse2/file.c?h=fuse2#n582 > > and fudev_map_ioctl(): > > https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git/tree/fs/fuse2/fudev.c?h=fuse2#n601 > > This avoids the security issue Jann mentioned as well as allowing > arbitrary mapping of file ranges. E.g. it could also be used by a > block based filesystem to map I/O directly into the block device. > > What the implementation lacks is any kind of caching. Since your > usecase involves just one map extent per file, special casing that > would be trivial. We can revisit general caching later. > > Thanks, > Miklos