On Tue, Oct 8, 2024 at 5:21 PM Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > Jeff, > > 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 valid (?) for filesystems to return a handle type with upper > bits set, but AFAIK, no in-tree filesystem does that. > I added some assertions just in case. FYI, version with softened assertions at: https://github.com/amir73il/linux/commits/connectable-fh/ fstest at: https://github.com/amir73il/xfstests/commits/connectable-fh/ man-page at: https://github.com/amir73il/man-pages/commits/connectable-fh/ > > Thanks, > Amir. > > Changes since v2 [2]: > - Use bit arithmetics instead of bitfileds (Jeff) > - Add assertions about use of high type bits > > Changes since v1 [1]: > - Assert on encode for disconnected path (Jeff) > - Don't allow AT_HANDLE_CONNECTABLE with AT_EMPTY_PATH > - Drop the O_PATH mount_fd API hack (Jeff) > - Encode an explicit "connectable" flag in handle type > > [1] https://lore.kernel.org/linux-fsdevel/20240919140611.1771651-1-amir73il@xxxxxxxxx/ > [2] https://lore.kernel.org/linux-fsdevel/20240923082829.1910210-1-amir73il@xxxxxxxxx/ > > Amir Goldstein (3): > fs: prepare for "explicit connectable" file handles > fs: name_to_handle_at() support for "explicit connectable" file > handles > fs: open_by_handle_at() support for decoding "explicit connectable" > file handles > > fs/exportfs/expfs.c | 14 ++++++-- > fs/fhandle.c | 74 ++++++++++++++++++++++++++++++++++---- > include/linux/exportfs.h | 16 +++++++++ > include/uapi/linux/fcntl.h | 1 + > 4 files changed, 97 insertions(+), 8 deletions(-) > > -- > 2.34.1 >