diff options
| author | Christian Brauner <brauner@kernel.org> | 2024-11-15 11:35:16 +0100 |
|---|---|---|
| committer | Christian Brauner <brauner@kernel.org> | 2024-11-15 11:35:16 +0100 |
| commit | a312c10c0186b3fa6e6f9d4ca696913372804fae (patch) | |
| tree | 711948eb7e7ff56240671b86628c6db7acd9e565 /include/linux/exportfs.h | |
| parent | 8e929cb546ee42c9a61d24fae60605e9e3192354 (diff) | |
| parent | a20853ab8296d4a8754482cb5e9adde8ab426a25 (diff) | |
Merge patch series "API for exporting connectable file handles to userspace"
Amir Goldstein <amir73il@gmail.com> says:
These patches bring the NFS connectable file handles feature to
userspace servers.
They rely on Christian's and Aleksa's changes recently merged to v6.12.
The API I chose for encoding conenctable file handles is pretty
conventional (AT_HANDLE_CONNECTABLE).
open_by_handle_at(2) does not have AT_ flags argument, but also, I find
it more useful API that encoding a connectable file handle can mandate
the resolving of a connected fd, without having to opt-in for a
connected fd independently.
I chose to implemnent this by using upper bits in the handle type field
It may be that out-of-tree filesystems return a handle type with upper
bits set, but AFAIK, no in-tree filesystem does that.
I added some warnings just in case we encouter that.
I have written an fstest [1] and a man page draft [2] for the feature.
[1] https://github.com/amir73il/xfstests/commits/connectable-fh/
[2] https://github.com/amir73il/man-pages/commits/connectable-fh/
* patches from https://lore.kernel.org/r/20241011090023.655623-1-amir73il@gmail.com:
fs: open_by_handle_at() support for decoding "explicit connectable" file handles
fs: name_to_handle_at() support for "explicit connectable" file handles
fs: prepare for "explicit connectable" file handles
Link: https://lore.kernel.org/r/20241011090023.655623-1-amir73il@gmail.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'include/linux/exportfs.h')
| -rw-r--r-- | include/linux/exportfs.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h index 893a1d21dc1c..fcab6ab1d38a 100644 --- a/include/linux/exportfs.h +++ b/include/linux/exportfs.h @@ -160,6 +160,19 @@ struct fid { #define EXPORT_FH_FID 0x2 /* File handle may be non-decodeable */ #define EXPORT_FH_DIR_ONLY 0x4 /* Only decode file handle for a directory */ +/* + * Filesystems use only lower 8 bits of file_handle type for fid_type. + * name_to_handle_at() uses upper 16 bits of type as user flags to be + * interpreted by open_by_handle_at(). + */ +#define FILEID_USER_FLAGS_MASK 0xffff0000 +#define FILEID_USER_FLAGS(type) ((type) & FILEID_USER_FLAGS_MASK) + +/* 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) + /** * struct export_operations - for nfsd to communicate with file systems * @encode_fh: encode a file handle fragment from a dentry |
