From owner-cvs-all@FreeBSD.ORG Sun Oct 5 13:00:41 2003 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 76E5316A4BF; Sun, 5 Oct 2003 13:00:41 -0700 (PDT) Received: from mail.chesapeake.net (chesapeake.net [208.142.252.6]) by mx1.FreeBSD.org (Postfix) with ESMTP id B1D4543FE3; Sun, 5 Oct 2003 13:00:38 -0700 (PDT) (envelope-from jroberson@chesapeake.net) Received: from localhost (jroberson@localhost) by mail.chesapeake.net (8.11.6/8.11.6) with ESMTP id h95K0bf19482; Sun, 5 Oct 2003 16:00:37 -0400 (EDT) (envelope-from jroberson@chesapeake.net) Date: Sun, 5 Oct 2003 16:00:37 -0400 (EDT) From: Jeff Roberson To: Don Lewis In-Reply-To: <200310051013.h95ADqN1049043@gw.catspoiler.org> Message-ID: <20031005155831.K99666-100000@mail.chesapeake.net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: cvs-src@FreeBSD.org cc: jeff@FreeBSD.org cc: src-committers@FreeBSD.org cc: cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/kern vfs_subr.c X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Oct 2003 20:00:41 -0000 On Sun, 5 Oct 2003, Don Lewis wrote: > On 5 Oct, Jeff Roberson wrote: > > On Sun, 5 Oct 2003, Don Lewis wrote: > > > >> On 5 Oct, Jeff Roberson wrote: > >> > jeff 2003/10/05 00:12:38 PDT > >> > > >> > FreeBSD src repository > >> > > >> > Modified files: > >> > sys/kern vfs_subr.c > >> > Log: > >> > - Fix an XXX. Check the error of vn_lock() in vflush(). Don't specify > >> > LK_RETRY either, we don't want this vnode if it turns into another. > >> > - Remove the code that checks the mount point after acquiring the lock > >> > we are guaranteed to either fail or get the vnode that we wanted. > >> > > >> > Revision Changes Path > >> > 1.465 +2 -13 src/sys/kern/vfs_subr.c > >> > >> What keeps this from spinning if some other thread holds the lock on the > >> first vnode on the list? > >> > > > > It should only fail if the vnode was vcleaned() out from under us, right? > > If that's the case than the list has been modified by the time we relock > > it and check. > > > > Do you agree > > What about the !FORCECLOSE case where the vnode is locked by some other > thread that is doing I/O on it? The call to vn_lock() will fail, we'll > re-lock mntvnode_mtx, start the loop again, and immediately try to lock > the same vnode again. > > It looks to me like we either need to sleep and wait for the vnode lock, > or we need to skip to the next vnode and try this vnode again later. > In vflush we do sleep on the vnode lock. The flags are LK_EXCLUSIVE | LK_INTERLOCK. We dont pass in LK_NOWAIT.