diff options
author | Miklos Szeredi <mszeredi@redhat.com> | 2025-08-22 13:10:44 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@redhat.com> | 2025-09-02 11:14:15 +0200 |
commit | dfb84c33079497bf27058b15780e1c7bba4c371b (patch) | |
tree | e45caf557d5bcfc1dcd6cc81e8de84a5531e570a /net/unix/af_unix.c | |
parent | 3ca1b311181072415b6432a169de765ac2034e5a (diff) |
fuse: allow synchronous FUSE_INIT
FUSE_INIT has always been asynchronous with mount. That means that the
server processed this request after the mount syscall returned.
This means that FUSE_INIT can't supply the root inode's ID, hence it
currently has a hardcoded value. There are other limitations such as not
being able to perform getxattr during mount, which is needed by selinux.
To remove these limitations allow server to process FUSE_INIT while
initializing the in-core super block for the fuse filesystem. This can
only be done if the server is prepared to handle this, so add
FUSE_DEV_IOC_SYNC_INIT ioctl, which
a) lets the server know whether this feature is supported, returning
ENOTTY othewrwise.
b) lets the kernel know to perform a synchronous initialization
The implementation is slightly tricky, since fuse_dev/fuse_conn are set up
only during super block creation. This is solved by setting the private
data of the fuse device file to a special value ((struct fuse_dev *) 1) and
waiting for this to be turned into a proper fuse_dev before commecing with
operations on the device file.
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'net/unix/af_unix.c')
0 files changed, 0 insertions, 0 deletions