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>