vfs megapatch 09 (not for the faint of heart)

Matthew Dillon dillon at apollo.backplane.com
Sat Oct 9 23:45:57 PDT 2004


    (This is really the second one, but I decided to synchronize the name
    with my internal patch file names to avoid confusion).

    !!! All normal users not involved with testing the VFS code should be
    using kernels based on the DragonFly_Stable tag and not mess with this
    stuff !!!

    Here's mega patch 09, relative to HEAD.  This is not for the faint of
    heart.

	fetch http://leaf.dragonflybsd.org/~dillon/vfsx09.patch

    Known issues:

	* Possible vnode/namecache deadlocks.
	* While most filesystems now use vp->v_lock, I haven't done a final
	  pass to make vp->v_lock mandatory and to clean up the few remaining
	  inode based locks (nwfs I think and other obscure filesystems).
	* NullFS gets confused when you hit a mount point in the underlying
	  filesystem.
	* Only UFS and NFS have been well tested

    Patch 09:

	* VX lock all VOP_CLOSE operations.
	* Fix two NFS issues.  There was an incorrect assertion (found by
	  David Rhodus), and the nfs_rename() code was not properly 
	  purging the target file from the cache, resulting in Stale file
	  handle errors during, e.g. a buildworld with an NFS-mounted /usr/obj.
	* Fix a TTY session issue.  Programs which open("/dev/tty" ,...) and
	  then run the TIOCNOTTY ioctl were causing the system to lose track
	  of the open count, preventing the tty from properly detaching.
	  This is actually a very old BSD bug, but it came out of the woodwork
	  in DragonFly because I am now attempting to track device opens
	  explicitly.

    Patch 08:

	* Gets rid of the vnode interlock.  The lockmgr interlock remains.
	* Introduced VX locks, which are mandatory vp->v_lock based locks.
	* Rewrites the locking semantics for deactivation and reclamation.
	  (A ref'd VX lock'd vnode is now required for vgone(), VOP_INACTIVE,
	  and VOP_RECLAIM).  New guarentees emplaced with regard to vnode
	  ripouts.
	* Recodes the mountlist scanning routines to close timing races.
	* Recodes getnewvnode to close timing races (it now returns a
	  VX locked and refd vnode rather then a refd but unlocked vnode).
	* Recodes VOP_REVOKE- a locked vnode is now mandatory.
	* Recodes all VFS inode hash routines to close timing holes.
	* Removes cache_leaf_test() - vnodes representing intermediate 
	  directories are now held so the leaf test should no longer be
	  necessary.
	* Splits the over-large vfs_subr.c into three additional source
	  files, broken down by major function (locking, mount related,
	  filesystem syncer).


					-Matt
					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>





More information about the Kernel mailing list