Allow a filesystem to indicate that it supports encoding autonomous file handles that can be decoded without having to pass a filesystem for the filesystem. In other words, the file handle uniquely identifies the filesystem. Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx> --- fs/fhandle.c | 7 ++++++- include/linux/exportfs.h | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/fs/fhandle.c b/fs/fhandle.c index 22edced83e4c..ab4891925b52 100644 --- a/fs/fhandle.c +++ b/fs/fhandle.c @@ -23,12 +23,13 @@ static long do_sys_name_to_handle(const struct path *path, struct file_handle f_handle; int handle_dwords, handle_bytes; struct file_handle *handle = NULL; + const struct export_operations *eops = path->dentry->d_sb->s_export_op; /* * We need to make sure whether the file system support decoding of * the file handle if decodeable file handle was requested. */ - if (!exportfs_can_encode_fh(path->dentry->d_sb->s_export_op, fh_flags)) + if (!exportfs_can_encode_fh(eops, fh_flags)) return -EOPNOTSUPP; /* @@ -90,6 +91,10 @@ static long do_sys_name_to_handle(const struct path *path, if (d_is_dir(path->dentry)) handle->handle_type |= FILEID_IS_DIR; } + + /* Filesystems supports autonomous file handles. */ + if (eops->flags & EXPORT_OP_AUTONOMOUS_HANDLES) + handle->handle_type |= FILEID_IS_AUTONOMOUS; retval = 0; } /* copy the mount id */ diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h index 5bb757b51f5c..f7f9038b285e 100644 --- a/include/linux/exportfs.h +++ b/include/linux/exportfs.h @@ -188,7 +188,8 @@ struct handle_to_path_ctx { /* Flags supported in encoded handle_type that is exported to user */ #define FILEID_IS_CONNECTABLE 0x10000 #define FILEID_IS_DIR 0x20000 -#define FILEID_VALID_USER_FLAGS (FILEID_IS_CONNECTABLE | FILEID_IS_DIR) +#define FILEID_IS_AUTONOMOUS 0x40000 +#define FILEID_VALID_USER_FLAGS (FILEID_IS_CONNECTABLE | FILEID_IS_DIR | FILEID_IS_AUTONOMOUS) /** * struct export_operations - for nfsd to communicate with file systems @@ -285,6 +286,7 @@ struct export_operations { */ #define EXPORT_OP_FLUSH_ON_CLOSE (0x20) /* fs flushes file data on close */ #define EXPORT_OP_NOLOCKS (0x40) /* no file locking support */ +#define EXPORT_OP_AUTONOMOUS_HANDLES (0x80) /* filesystem supports autonomous file handles */ unsigned long flags; }; -- 2.47.2