Re: [PATCH RFC v2] fhandle: expose u64 mount id to name_to_handle_at(2)

From: Christoph Hellwig
Date: Tue May 28 2024 - 09:24:22 EST


On Tue, May 28, 2024 at 02:04:16PM +0200, Christian Brauner wrote:
> Can you please explain how opening an fd based on a handle returned from
> name_to_handle_at() and not using a mount file descriptor for
> open_by_handle_at() would work?

Same as NFS file handles:

name_to_handle_at returns a handle that includes a file system
identifier.

open_by_handle_at looks up the superblock based on that identifier.

For the identifier I could imagin three choices:

1) use the fsid as returned in statfs and returned by fsnotify.
The downside is that it is "only" 64-bit. The upside is that
we have a lot of plumbing for it
2) fixed 128-bit identifier to provide more entropy
3) a variable length identifier, which is more similar to NFS,
but also a lot more complicated

We'd need a global lookup structure to find the sb by id. The simplest
one would be a simple linear loop over super_blocks which isn't terribly
efficient, but probably better than whatever userspace is doing to
find a mount fd right now.

Let me cook up a simple prototype for 1) as it shouldn't be more than
a few hundred lines of code.