Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 2 Jun 2012 23:34:21 +0000 (UTC)
From:      Benjamin Kaduk <bjk@freebsd.org>
To:        freebsd-hackers@freebsd.org
Subject:   namecache documentation and locking
Message-ID:  <alpine.BSF.2.00.1206021946320.61817@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
Hi all,

My colleague recently pointed out to me that I was calling vgone() when I 
probably wanted to be using cache_purge() (as is done for implementations 
of this OS-specific function in other BSDs [1]).

This caused me to take a look at the namecache functions and find not very 
much documentation of their use.  I see that NetBSD has had a namecache.9 
man page since 2001 [2], and their actual code shares its origin from 4.2 
BSD with ours ... but our vfs_cache.c is at (CVS) revision 1.181 versus 
NetBSD's 1.88, and there are at least superficial differences between the 
two.

Is there a summary of the design/implementation somewhere that I could use 
as a reference, or can someone send one here?  I would like to come up 
with a namecache.9 for FreeBSD's implementation.

The particular question which promped my investigation is for the locking 
around cache_purge(); I was not immediately able to tell from looking at 
other consumers whether the vnode lock needs to or should be held around 
such calls.  Looking at the implementation of some of the other namecache 
functions makes it seem that the lock order is vnode lock then namecache 
lock, which would suggest that holding the vnode lock across cache_purge 
would be okay, but I would like some confirmation before I use and 
document it as such.

Thanks,

Ben Kaduk

[1] 
http://git.openafs.org/?p=openafs.git;a=blob;f=src/afs/FBSD/osi_vm.c;h=072142d7991c0012339fe15eee7a474ac8db4a13;hb=HEAD#l115
http://git.openafs.org/?p=openafs.git;a=blob;f=src/afs/NBSD/osi_vm.c;h=5cc2beb3fa3772a25788205d1deb208a9113ef4e;hb=HEAD#l59
http://git.openafs.org/?p=openafs.git;a=blob;f=src/afs/OBSD/osi_vm.c;h=737b742310d3649ffbcea0f23f059ee761d638d2;hb=HEAD#l57
http://git.openafs.org/?p=openafs.git;a=blob;f=src/afs/DARWIN/osi_vm.c;h=805cb38f0c17c6c83d9abda649b946adddef1c98;hb=HEAD#l51

[2] http://netbsd.gw.com/cgi-bin/man-cgi?namecache++NetBSD-current
http://cvsweb.netbsd.org/bsdweb.cgi/src/share/man/man9/namecache.9?only_with_tag=MAIN



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