In message <[EMAIL PROTECTED]>, Matt Dillon writes:
>:>    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
>
>     hahahahahahahaha..  Look at the code more closely.  v_id is not
>     managed by NFS, it's managed by vfs_cache.c.  There's a big XXX
>     comment just before cache_purge() that explains it.  Believe me,
>     NFS is the least of your worries here.

Matt, you try to free vnodes back to the malloc pool and you will
see what happens OK ?

--
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
[EMAIL PROTECTED]         | 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 [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to