DragonFly kernel List (threaded) for 2004-08
vfs patch 03 (preliminary)
This patch removes the v_vnlock mess and simply embeds the vnode lock
directly in the vnode. It goes one step beyond what FreeBSD-5 did in
that it entirely removes the v_vnlock pointer field (and later on I will
probably remove v_interlock in favor the v_lock.lck_interlock).
This patch is currently only lightly tested and I do not consider it
stable yet, I am looking for volunteers to test it with the various
filesystems you normally use and report on any problems. e.g. msdosfs,
cd9660, nullfs, unionfs, and so forth. UFS testing under heavy loads
is also needed.
I fully expect there to be some problems. DO NOT apply this patch unless
you can handle the machine crashing and getting backtraces and dumps. The
code will be committed, tentitively, on Saturday.
* remove v_vnlock.
* remove locks embedded in v_data.
* embed a lock in the vnode and consolidate inode locks into vnode locks.
* makes locking mandatory (removes vop_nolock() and friends).
(the default is now vop_stdlock, rather then vop_nolock).
* substantially rewrites the inode allocation interlocks in most of the
* replaces procfs's linear lookup list with a small hash table. Adds
code to fix a lookup/free race.
* rewrites nullfs's locking code (this is where problems are most likely
to be found).
* replaces NFS's use of shared locks with normal shared/exclusive locks
[ By Tomorrow I'll have an update which also fixes the race-to-root
problem when an NFS volume goes offline ]