From owner-freebsd-current Tue May 6 05:01:31 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.5/8.8.5) id FAA06940 for current-outgoing; Tue, 6 May 1997 05:01:31 -0700 (PDT) Received: from nlsystems.com (nlsys.demon.co.uk [158.152.125.33]) by hub.freebsd.org (8.8.5/8.8.5) with ESMTP id FAA06933 for ; Tue, 6 May 1997 05:01:27 -0700 (PDT) Received: from herring.nlsystems.com (herring.nlsystems.com [10.0.0.2]) by nlsystems.com (8.8.5/8.8.5) with SMTP id NAA22612; Tue, 6 May 1997 13:01:46 +0100 (BST) Date: Tue, 6 May 1997 13:01:45 +0100 (BST) From: Doug Rabson To: Poul-Henning Kamp cc: current@freebsd.org Subject: Re: vnode->v_usage In-Reply-To: <207.862417862@critter> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-current@freebsd.org X-Loop: FreeBSD.org Precedence: bulk On Wed, 30 Apr 1997, Poul-Henning Kamp wrote: > In message , Dou > g Rabson writes: > >On Sun, 27 Apr 1997, Poul-Henning Kamp wrote: > >> > >> Unless somebody convinces me of the utility of this field, I will remove > >> it from the vnodes. > >> > >I think it is intended to be used to keep frequently used vnodes from > >being recycled by getnewvnode. > > Well, I've done it. Here is a patch that implements LRU for name-cache > hits on the vnode freelist. I doubt that it has any performance impact, > but it makes the vnode 4 bytes smaller, which is a good thing. > > Please test and report. > > Recompile or rename your LKMs before trying this! I just had a page fault in vtouch. The code needs to check for v_freelist.tqe_prev != 0xdeadb (shudder) to protect itself from races with getnewvnode. Index: vfs_subr.c =================================================================== RCS file: /home/ncvs/src/sys/kern/vfs_subr.c,v retrieving revision 1.85 diff -u -r1.85 vfs_subr.c --- vfs_subr.c 1997/05/04 09:17:29 1.85 +++ vfs_subr.c 1997/05/06 11:57:05 @@ -2149,8 +2149,10 @@ return; } if (simple_lock_try(&vnode_free_list_slock)) { - TAILQ_REMOVE(&vnode_free_list, vp, v_freelist); - TAILQ_INSERT_TAIL(&vnode_free_list, vp, v_freelist); + if (vp->v_freelist.tqe_prev != (struct vnode **)0xdeadb) { + TAILQ_REMOVE(&vnode_free_list, vp, v_freelist); + TAILQ_INSERT_TAIL(&vnode_free_list, vp, v_freelist); + } simple_unlock(&vnode_free_list_slock); } simple_unlock(&vp->v_interlock); -- Doug Rabson Mail: dfr@nlsystems.com Nonlinear Systems Ltd. Phone: +44 181 951 1891