[PATCH] root-hopping for pre-2.3.41-3
Werner Almesberger
almesber en lrc.di.epfl.ch
Mie Ene 26 14:35:07 CST 2000
Horst von Brand wrote:
> Extra acceses when mounting would be preferable to complicating everything
> else, IMMHO.
I think that's what Peter meant. Actually I think we can try to make an
educated guess to predict what he'll do :-)
A bit of dentry theory: if we have a dentry, the most important
pointers are:
- d_parent: points to the parent or, if at the top of a file system,
to itself
- d_covers: points to the directory on which we're mounted, or to
itself
- d_mounts: points to the directory that's mounted on it, or to
itself
- d_child, etc.: pointers to child dentries for forward lookups
(it's actually a bit more complicated, because names are stored
elsewhere, in fs/dcache.c:dentry_hashtable)
^ Let's use n, U, and ( to
| indicate a pointer that
d_mounts points back to the
| dentry.
<--d_parent---[dentry]---d_child--->
| etc.
d_covers
|
v
At a mount point, things look like this:
n
([bar]-... <tree of bar> "foo" and "bar" are not real names.
^ | The real names are in a global hash
| v table. Dentry "bar" is mounted on top
..-[foo]-... <hidden tree of "foo".
U of foo>
Forward travel is by
- lookup child dentry
- go to its d_mounts (fs/namei.c:follow_mount)
Backward travel (..) is by
- dentry = dentry->d_covers->d_parent (fs/namei.c:reserved_lookup)
If we keep these semantics, overmounting would have to look like
this (assuming there are no funny semantics a la IFS/TFS):
([zulu]-... <tree of zulu>
^ |([bah]-... <hidden tree of bah>
| | |([bar]-... <hidden tree of bar>
| | | |
| v v v
..-[xyzzy]-... <hidden tree of xyzzy>
U
(The sub-trees hanging off zulu, bah, and bar are independent.)
So all that's left is to have a list of "hidden" mount points
underneath the current one (e.g. zulu -> bah -> bar), the
occasional fixes for all places that assume
X->d_mounts->d_covers == X
(they should be pretty much concentrated in fs/super.c), plus
the removal of checks that disallow mounting on top of a mount
point (ditto).
Peter, how good is my guess ?
- Werner
--
_________________________________________________________________________
/ Werner Almesberger, ICA, EPFL, CH werner.almesberger en ica.epfl.ch /
/_IN_N_032__Tel_+41_21_693_6621__Fax_+41_21_693_6610_____________________/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo en vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/
Más información sobre la lista de distribución Ayuda