Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Apr 1997 13:03:20 -0700 (MST)
From:      Terry Lambert <terry@lambert.org>
To:        Tor.Egge@idi.ntnu.no (Tor Egge)
Cc:        dfr@nlsystems.com, terry@lambert.org, dg@root.com, ponds!rivers@dg-rtp.dg.com, freebsd-hackers@freebsd.org
Subject:   Re: kern/3184: vnodes are used after they are freed. (dup alloc?)
Message-ID:  <199704052003.NAA23438@phaeton.artisoft.com>
In-Reply-To: <199704051654.SAA01155@pat.idt.unit.no> from "Tor Egge" at Apr 5, 97 06:54:21 pm

next in thread | previous in thread | raw e-mail | index | archive | help
> > I know about this problem.  Unfortunately the only way of fixing it is
> > probably to keep private pools of vnodes for each filesystem (which Terry
> > has been badgering me about for *years*).  It might happen but it is a
> > fair amount of work.  For the moment, I will settle with a system which is
> > stable, even it does hang when a server fails.
> 
> Two other ways:
> 
>   - Let getnewvnode call VOP_ISLOCKED and skip locked nodes on the 
>     so-called free list. 

There's no holder, so it isn't locked.  If it were locked via VOP_LOCK,
then you wouldn'r be having this problem in the first place, since a
VOP_LOCK will prevent a node from being vclean()'ed (that's the whole
point of the NFS changes Doug has been trying to deal with, if you
followed his postings on them).

>   - Delay putting vnodes onto the so-called free list until
>     VOP_INACTIVE has been called, and use a flag to indicate that a
>     vnode is not on the so-called free list even when v_usecount is
>     0. Add needed checks where the code currently assumes that
>     v_usecount==0 means that the vnode is on the so-called free list.

This is hard.  It would much easier to go to a reference as a counting
semaphore (vp->v_count++;) in all cases where the reference was held,
and establish a "hold" on behalf of the recycler.


					Regards,
					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199704052003.NAA23438>