• Aleksa Sarai's avatar
    fhandle: expose u64 mount id to name_to_handle_at(2) · 4356d575
    Aleksa Sarai authored
    Now that we provide a unique 64-bit mount ID interface in statx(2), we
    can now provide a race-free way for name_to_handle_at(2) to provide a
    file handle and corresponding mount without needing to worry about
    racing with /proc/mountinfo parsing or having to open a file just to do
    statx(2).
    
    While this is not necessary if you are using AT_EMPTY_PATH and don't
    care about an extra statx(2) call, users that pass full paths into
    name_to_handle_at(2) need to know which mount the file handle comes from
    (to make sure they don't try to open_by_handle_at a file handle from a
    different filesystem) and switching to AT_EMPTY_PATH would require
    allocating a file for every name_to_handle_at(2) call, turning
    
      err = name_to_handle_at(-EBADF, "/foo/bar/baz", &handle, &mntid,
                              AT_HANDLE_MNT_ID_UNIQUE);
    
    into
    
      int fd = openat(-EBADF, "/foo/bar/baz", O_PATH | O_CLOEXEC);
      err1 = name_to_handle_at(fd, "", &handle, &unused_mntid, AT_EMPTY_PATH);
      err2 = statx(fd, "", AT_EMPTY_PATH, STATX_MNT_ID_UNIQUE, &statxbuf);
      mntid = statxbuf.stx_mnt_id;
      close(fd);
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarAleksa Sarai <cyphar@cyphar.com>
    Link: https://lore.kernel.org/r/20240828-exportfs-u64-mount-id-v3-2-10c2c4c16708@cyphar.comReviewed-by: default avatarJan Kara <jack@suse.cz>
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
    4356d575
fhandle.c 10.4 KB