cvs commit: src/sys/kern vfs_lookup.c
Jeff Roberson
jroberson at chesapeake.net
Sat Apr 9 05:25:08 PDT 2005
On Sat, 9 Apr 2005, Jeff Roberson wrote:
> jeff 2005-04-09 11:53:16 UTC
>
> FreeBSD src repository
>
> Modified files:
> sys/kern vfs_lookup.c
With this change I'm able to make -j128 buildworld on a nullfs mount of
/usr/src at the same time as doing the same on the real /usr/src. The
intrduction of a vn_lock in vrele() more than 5 years ago broke this by
creating a lock order reversal in every place that vrele'd the dvp before
droping a child's lock.
> Log:
> - If we vrele() a dvp while the child is locked we can potentially deadlock
> when vrele() acquires the directory lock in the wrong order. Fix this
> via the following changes:
> - Keep the directory locked after VOP_LOOKUP() until we've determined
> what we're going to do with the child. This allows us to remove the
> complicated post LOOKUP code which determins whether we should lock or
> unlock the parent. This means we may have to vput() in the appropriate
> cases later, rather than doing an unsafe vrele.
> - in NDFREE() keep two flags to indicate whether we need to unlock vp or
> dvp. This allows us to vput rather than vrele in the appropriate
> cases without rechecking the flags. Move the code to handle dvp after
> we handle vp.
> - Remove some dead code from namei() that was the result of changes to
> VFS_LOCK_GIANT().
>
> Sponsored by: Isilon Systems, Inc.
>
> Revision Changes Path
> 1.78 +60 -51 src/sys/kern/vfs_lookup.c
>
More information about the cvs-src
mailing list