On Tue 24-06-25 10:29:12, Christian Brauner wrote: > 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> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > 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 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR