From owner-freebsd-hackers Tue Apr 17 10:35:28 2001 Delivered-To: freebsd-hackers@freebsd.org Received: from critter.freebsd.dk (critter.freebsd.dk [212.242.86.163]) by hub.freebsd.org (Postfix) with ESMTP id 59A5B37B647 for ; Tue, 17 Apr 2001 10:35:13 -0700 (PDT) (envelope-from phk@critter.freebsd.dk) Received: from critter (localhost [127.0.0.1]) by critter.freebsd.dk (8.11.3/8.11.3) with ESMTP id f3HHYGU24579; Tue, 17 Apr 2001 19:34:16 +0200 (CEST) (envelope-from phk@critter.freebsd.dk) To: Matt Dillon Cc: Kirk McKusick , Julian Elischer , Rik van Riel , freebsd-hackers@FreeBSD.ORG, David Xu Subject: Re: vm balance In-Reply-To: Your message of "Tue, 17 Apr 2001 10:28:27 PDT." <200104171728.f3HHSRY94888@earth.backplane.com> Date: Tue, 17 Apr 2001 19:34:16 +0200 Message-ID: <24577.987528856@critter> From: Poul-Henning Kamp Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG In message <200104171728.f3HHSRY94888@earth.backplane.com>, Matt Dillon writes: > >:When I first heard you say this I thought you were off your rockers, >:but gradually I have come to think that you may be right. >: >:I think the task will be easier if we get the vnode/buf relationship >:untangled a bit first. >: >:I may also pay off to take vnodes out of diskoperations entirely before >:we try the merge. > > Yes, I agree. The vnode/VM-object issue is minor compared to > the vnode/buf/io issue. We're getting there, we're getting there... >:Actually the main problem is that NFS relies on vnodes never being >:freed to hold "soft references" using "struct vnode * + v_id). >: >:-- >:Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 > > I don't think NFS relies on vnodes never being freed. It does, in some case nfs stashes a vnode pointer and the v_id value away, and some time later tries to use that pair to try to refind the vnode again. If you free vnodes, it will still think the pointer is a vnode and if junk happens to be right it will think it is still a vnode. QED: Bad things (TM) will happen. # cd /sys/nfs # grep v_id * nfs_nqlease.c: vpid = vp->v_id; nfs_nqlease.c: if (vpid == vp->v_id) { nfs_nqlease.c: if (vpid == vp->v_id && nfs_vnops.c: vpid = newvp->v_id; nfs_vnops.c: if (vpid == newvp->v_id) { -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message