Re: [PATCH v2 0/5] pid: add pidfd_open()
From: Al Viro <viro@zeniv.linux.org.uk>
Date: 2019-04-01 00:09:54
Also in:
lkml
On Sun, Mar 31, 2019 at 04:40:15PM -0700, Linus Torvalds wrote:
The clever alternative, which might be the RightWay(tm) is to just create a completely unattached dentry, and basically tie it into the actual /proc filesystem hierarchy at lookup() time when somebody does the openat() using it for the first time. You'd get a very simple callback: since the dentry would be unattached, you'd be guaranteed to get a "lookup()" from the VFS layer, and that lookup would then do the "hook into the actual /proc filesystem".
Ugh... Which vfsmount would you have to go with it?
We already kind of do things like that in the VFS layer when we have unattached dentries (because of "look up by filehandle" etc). In many ways the "pidfd_open()" really is exactly a "look up by file handle" operation, it just so happens that the "file handle" is just the pid/namespace combination.
Except that we never let unattached _directory_ dentries out - if we can't reattach them to the tree, open-by-handle will tell you to take a hike.
And if the splice alias (which is what the VFS layer calls that "tie aliased dentry to the parent" operation) fails, because the /proc filesystem isn't mounted or whatever, then trying to look up names off the thing will also fail.
It's a tiny bit too clever for my taste, and it's not *exactly* the same thing as our normal inode alias handling, but it's pretty close conceptually (and even practically).
It's more than a tiny bit too clever for mine...
So it would basically do something very similar to the ioctl, but it would do it implicitly and automatically at that first lookup. That would also mean that you'd not actually pay the cost of doing any of this *unless* you also end up trying to open things in /proc using that pidfd.
Al, back to normal life and digging through several flamefests from hell...