cvs commit: src/sys/kern src/sys/sys
Matthew Dillon
dillon at crater.dragonflybsd.org
Fri Oct 1 20:19:13 PDT 2004
dillon 2004/10/01 20:18:28 PDT
DragonFly src repository
Modified files:
sys/kern vfs_cache.c vfs_syscalls.c
sys/sys namecache.h
Log:
VFS messaging/interfacing work stage 7b/99: More firming up of stage 7.
(1) Enhance cache_resolve() to go up the directory chain as far as necessary
to resolve the chain. Previously I wimped out and returned an error.
(2) Be sure not to use the parent of a mount point to obtain the vnode
operations vector for a child of a mount point (which resides on a
different filesystem!).
Generally speaking the namecache directory chain should contain resolved
vnodes due to the fact that the vnode associated with a namecache entry is
held if any children exist, preventing the vnode from being recycled.
However, the NFS client code as originally written wimps out and does
wholesale namecache flushing of directories when it isn't sure about the
state of things (which is quite often, especially when you are rm'ing
files), and this breaks that assumption and causes some intermediate NFS
directory nodes to revert back into an 'unresolved' state. This will
eventually be fixed, but not right now.
Add a nc_mount pointer to the namecache structure. For the moment this is
only used to get at the mount point associated with a NCF_MOUNTPT namecache
node (whether resolved or unresolved), making it easier for us to resolve
the vnode. But eventually it will be used as the basis for obtaining the
v_ops for (new stlye) VOP calls on an unresolved namecache node, saving us
a few indirections so I don't consider it a hack.
Bugs-and-cores-by: drhodus
Revision Changes Path
1.31 +104 -4 src/sys/kern/vfs_cache.c
1.41 +1 -0 src/sys/kern/vfs_syscalls.c
1.11 +1 -0 src/sys/sys/namecache.h
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_cache.c.diff?r1=1.30&r2=1.31&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_syscalls.c.diff?r1=1.40&r2=1.41&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/sys/namecache.h.diff?r1=1.10&r2=1.11&f=u
More information about the Commits
mailing list