From owner-cvs-src@FreeBSD.ORG Tue Aug 30 22:47:05 2005 Return-Path: X-Original-To: cvs-src@FreeBSD.org Delivered-To: cvs-src@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AA5F516A41F; Tue, 30 Aug 2005 22:47:05 +0000 (GMT) (envelope-from bright@elvis.mu.org) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.FreeBSD.org (Postfix) with ESMTP id B374943D46; Tue, 30 Aug 2005 22:47:04 +0000 (GMT) (envelope-from bright@elvis.mu.org) Received: by elvis.mu.org (Postfix, from userid 1192) id 91D245C7B6; Tue, 30 Aug 2005 15:47:04 -0700 (PDT) Date: Tue, 30 Aug 2005 15:47:04 -0700 From: Alfred Perlstein To: Alexander Kabaev Message-ID: <20050830224704.GI77060@elvis.mu.org> References: <200508301612.j7UGC3CM085774@repoman.freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200508301612.j7UGC3CM085774@repoman.freebsd.org> User-Agent: Mutt/1.4.2.1i Cc: cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/kern vfs_lookup.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Aug 2005 22:47:05 -0000 Ok, maybe I'm missing something, but... while (dp->v_type == VDIR && (mp = dp->v_mountedhere) && (cnp->cn_flags & NOCROSSMOUNT) == 0) { KASSERT(dp != ndp->ni_dvp, ("XXX")); if (vfs_busy(mp, 0, 0, td)) continue; here ->>> vput(dp); tvfslocked = VFS_LOCK_GIANT(mp); VFS_UNLOCK_GIANT(vfslocked); vfslocked = tvfslocked; VOP_UNLOCK(ndp->ni_dvp, 0, td); error = VFS_ROOT(mp, cnp->cn_lkflags, &tdp, td); VOP_LOCK(ndp->ni_dvp, cnp->cn_lkflags | LK_RETRY, td); vfs_unbusy(mp, td); if (error) { dpunlocked = 1; goto bad2; } ndp->ni_vp = dp = tdp; } Isn't dp already unlocked here? vput should be unlocking the vnode and we have the above KASSERT showing that they should be the same vnode... Also, I think lockparent doesn't need to be respected because we're trading parent vnodes. Basically, we're hitting a vnode that has another vnode stacked on it (root vnode), and switching to it. we're not actually decending. Is this OK? -Alfred * Alexander Kabaev [050830 09:12] wrote: > kan 2005-08-30 16:12:03 UTC > > FreeBSD src repository > > Modified files: (Branch: RELENG_6) > sys/kern vfs_lookup.c > Log: > MFC r1.81: > Do not keep parent directory locked while calling VFS_ROOT to > traverse mount points in lookup(). The lock can be dropped safely > around VFS_ROOT because LOCKPARENT semantics with child and parent > vnodes coming from different FSes does not really have any meaningful > use and we do not really care about parent state after we relock it. > This prevents easily triggered deadlock on systems using automounter > daemon. > > Approved by: re (scottl) > > Revision Changes Path > 1.80.2.1 +2 -0 src/sys/kern/vfs_lookup.c -- - Alfred Perlstein