Various filesystems such as pidfs and drm support opening file handles without having to require a file descriptor to identify the filesystem. The filesystem are global single instances and can be trivially identified solely on the information encoded in the file handle. This makes it possible to not have to keep or acquire a sentinal file descriptor just to pass it to open_by_handle_at() to identify the filesystem. That's especially useful when such sentinel file descriptor cannot or should not be acquired. For pidfs this means a file handle can function as full replacement for storing a pid in a file. Instead a file handle can be stored and reopened purely based on the file handle. Such autonomous file handles can be opened with or without specifying a a file descriptor. If no proper file descriptor is used the FD_INVALID sentinel must be passed. This allows us to define further special negative fd sentinels in the future. Userspace can trivially test for support by trying to open the file handle with an invalid file descriptor. Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx> --- Changes in v2: - Simplify the FILEID_PIDFS enum. - Introduce FD_INVALID. - Require FD_INVALID for autonomous file handles. - Link to v1: https://lore.kernel.org/20250623-work-pidfs-fhandle-v1-0-75899d67555f@xxxxxxxxxx --- Christian Brauner (11): fhandle: raise FILEID_IS_DIR in handle_type fhandle: hoist copy_from_user() above get_path_from_fd() fhandle: rename to get_path_anchor() pidfs: add pidfs_root_path() helper fhandle: reflow get_path_anchor() uapi/fcntl: mark range as reserved uapi/fcntl: add FD_INVALID exportfs: add FILEID_PIDFS fhandle: add EXPORT_OP_AUTONOMOUS_HANDLES marker fhandle, pidfs: support open_by_handle_at() purely based on file handle selftests/pidfd: decode pidfd file handles withou having to specify an fd fs/fhandle.c | 82 ++++++++++++++-------- fs/internal.h | 1 + fs/pidfs.c | 16 ++++- include/linux/exportfs.h | 9 ++- include/uapi/linux/fcntl.h | 17 +++++ include/uapi/linux/pidfd.h | 15 ---- tools/testing/selftests/pidfd/Makefile | 2 +- tools/testing/selftests/pidfd/pidfd.h | 6 +- .../selftests/pidfd/pidfd_file_handle_test.c | 60 ++++++++++++++++ 9 files changed, 158 insertions(+), 50 deletions(-) --- base-commit: 4e3d1e6e1b2d9df9650be14380c534b3c5081ddd change-id: 20250619-work-pidfs-fhandle-b63ff35c4924