Re: file metadata via fs API (was: [GIT PULL] Filesystem Information)
From: Al Viro
Date: Wed Aug 12 2020 - 12:34:04 EST
On Wed, Aug 12, 2020 at 05:13:14PM +0200, Miklos Szeredi wrote:
> > Lovely. And what of fchdir() to those?
>
> Not allowed.
Not allowed _how_? Existing check is "is it a directory"; what do you
propose? IIRC, you've mentioned using readdir() in that context, so
it's not that you only allow to open the leaves there.
> > > > Is that a flat space, or can they be directories?"
> > >
> > > Yes it has a directory tree. But you can't mkdir, rename, link,
> > > symlink, etc on anything in there.
> >
> > That kills the "shared inode" part - you'll get deadlocks from
> > hell that way.
>
> No. The shared inode is not for lookup, just for the open file.
Bloody hell... So what inodes are you using for lookups? And that
thing you would be passing to readdir() - what inode will _that_ have?
> > Next: what will that tree be attached to? As in, "what's the parent
> > of its root"? And while we are at it, what will be the struct mount
> > used with those - same as the original file, something different
> > attached to it, something created on the fly for each pathwalk and
> > lazy-umounted? And see above re fchdir() - if they can be directories,
> > it's very much in the game.
>
> Why does it have to have a struct mount? It does not have to use
> dentry/mount based path lookup.
What the fuck? So we suddenly get an additional class of objects
serving as kinda-sorta analogues of dentries *AND* now struct file
might refer to that instead of a dentry/mount pair - all on the VFS
level? And so do all the syscalls you want to allow for such "pathnames"?
Sure, that avoids all questions about dcache interactions - by growing
a replacement layer and making just about everything in fs/namei.c,
fs/open.c, etc. special-case the handling of that crap.
But yes, the syscall-level interface will be simple. Wonderful.
I really hope that's not what you have in mind, though.