Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Apr 2005 08:25:06 -0400 (EDT)
From:      Jeff Roberson <jroberson@chesapeake.net>
To:        Jeff Roberson <jeff@FreeBSD.org>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/kern vfs_lookup.c
Message-ID:  <20050409082310.J28571@mail.chesapeake.net>
In-Reply-To: <200504091153.j39BrGm2033374@repoman.freebsd.org>
References:  <200504091153.j39BrGm2033374@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050409082310.J28571>