xref: /openbsd-src/share/man/man9/vnode.9 (revision 05ee8c212a923ffe0a321ea1bf1cca1d561bf602)
1*05ee8c21Ssemarie.\"     $OpenBSD: vnode.9,v 1.35 2021/10/20 06:35:39 semarie Exp $
2bdc409b0Sart.\"
3bdc409b0Sart.\" Copyright (c) 2001 Constantine Sapuntzakis
4bdc409b0Sart.\" All rights reserved.
5bdc409b0Sart.\"
6bdc409b0Sart.\" Redistribution and use in source and binary forms, with or without
7bdc409b0Sart.\" modification, are permitted provided that the following conditions
8bdc409b0Sart.\" are met:
9bdc409b0Sart.\"
10bdc409b0Sart.\" 1. Redistributions of source code must retain the above copyright
11bdc409b0Sart.\"    notice, this list of conditions and the following disclaimer.
12bdc409b0Sart.\" 2. The name of the author may not be used to endorse or promote products
13bdc409b0Sart.\"    derived from this software without specific prior written permission.
14bdc409b0Sart.\"
15bdc409b0Sart.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
16bdc409b0Sart.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
17bdc409b0Sart.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
18bdc409b0Sart.\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19bdc409b0Sart.\" EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20bdc409b0Sart.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21bdc409b0Sart.\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22bdc409b0Sart.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23bdc409b0Sart.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24bdc409b0Sart.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25bdc409b0Sart.\"
26*05ee8c21Ssemarie.Dd $Mdocdate: October 20 2021 $
27601d79cdSjmc.Dt VNODE 9
28601d79cdSjmc.Os
29ea28b879Scsapuntz.Sh NAME
30ea28b879Scsapuntz.Nm vnode
31ea28b879Scsapuntz.Nd an overview of vnodes
32ea28b879Scsapuntz.Sh DESCRIPTION
338169bd84SjaredyA
348169bd84Sjaredy.Em vnode
358169bd84Sjaredyis an object in kernel memory that speaks the
368169bd84Sjaredy.Ux
378169bd84Sjaredyfile interface (open, read, write, close, readdir, etc.).
38fa986dacSdavidVnodes can represent files, directories, FIFOs, domain sockets, block devices,
391e2d51ddSartcharacter devices.
40a21ad506Scsapuntz.Pp
418169bd84SjaredyEach vnode has a set of methods which start with the string
428169bd84Sjaredy.Dq VOP_ .
438169bd84SjaredyThese methods include
448169bd84Sjaredy.Fn VOP_OPEN ,
458169bd84Sjaredy.Fn VOP_READ ,
468169bd84Sjaredy.Fn VOP_WRITE ,
478169bd84Sjaredy.Fn VOP_RENAME ,
488169bd84Sjaredy.Fn VOP_CLOSE ,
498169bd84Sjaredyand
508169bd84Sjaredy.Fn VOP_MKDIR .
51954ddbd6SmpechMany of these methods correspond closely to the equivalent
528169bd84Sjaredyfile system call \-
538169bd84Sjaredy.Xr open 2 ,
548169bd84Sjaredy.Xr read 2 ,
558169bd84Sjaredy.Xr write 2 ,
568169bd84Sjaredy.Xr rename 2 ,
578169bd84Sjaredyetc.
584c8a7c32SmpechEach file system (FFS, NFS, etc.) provides implementations for these methods.
59a21ad506Scsapuntz.Pp
608169bd84SjaredyThe Virtual File System library (see
618169bd84Sjaredy.Xr vfs 9 )
628169bd84Sjaredymaintains a pool of vnodes.
634c8a7c32SmpechFile systems cannot allocate their own vnodes; they must use the functions
644c8a7c32Smpechprovided by the VFS to create and manage vnodes.
658169bd84Sjaredy.Pp
668169bd84SjaredyThe definition of a vnode is as follows:
678169bd84Sjaredy.Bd -literal
688169bd84Sjaredystruct vnode {
69c92a16eaSkn	struct uvm_vnode *v_uvm;		/* uvm data */
70cedc705eSclaudio	const struct vops *v_op;		/* vnode operations vector */
718169bd84Sjaredy	enum	vtype v_type;			/* vnode type */
72c92a16eaSkn	enum	vtagtype v_tag;			/* type of underlying data */
738169bd84Sjaredy	u_int	v_flag;				/* vnode flags (see below) */
748169bd84Sjaredy	u_int   v_usecount;			/* reference count of users */
757d235245Sjmc	u_int   v_uvcount;			/* unveil references */
76c92a16eaSkn	/* reference count of writers */
77c92a16eaSkn	u_int   v_writecount;
788169bd84Sjaredy	/* Flags that can be read/written in interrupts */
79c92a16eaSkn	u_int   v_bioflag;
808169bd84Sjaredy	u_int   v_holdcnt;			/* buffer references */
818169bd84Sjaredy	u_int   v_id;				/* capability identifier */
82c92a16eaSkn	u_int	v_inflight;
838169bd84Sjaredy	struct	mount *v_mount;			/* ptr to vfs we are in */
848169bd84Sjaredy	TAILQ_ENTRY(vnode) v_freelist;		/* vnode freelist */
858169bd84Sjaredy	LIST_ENTRY(vnode) v_mntvnodes;		/* vnodes for mount point */
86c92a16eaSkn	struct	buf_rb_bufs v_bufs_tree;	/* lookup of all bufs */
878169bd84Sjaredy	struct	buflists v_cleanblkhd;		/* clean blocklist head */
888169bd84Sjaredy	struct	buflists v_dirtyblkhd;		/* dirty blocklist head */
898169bd84Sjaredy	u_int   v_numoutput;			/* num of writes in progress */
908169bd84Sjaredy	LIST_ENTRY(vnode) v_synclist;		/* vnode with dirty buffers */
918169bd84Sjaredy	union {
928169bd84Sjaredy		struct mount	*vu_mountedhere;/* ptr to mounted vfs (VDIR) */
93c92a16eaSkn		struct socket	*vu_socket;	/* unix ipc (VSOCK) */
948169bd84Sjaredy		struct specinfo	*vu_specinfo;	/* device (VCHR, VBLK) */
958169bd84Sjaredy		struct fifoinfo	*vu_fifoinfo;	/* fifo (VFIFO) */
968169bd84Sjaredy	} v_un;
978169bd84Sjaredy
98c92a16eaSkn	/* VFS namecache */
99c92a16eaSkn	struct namecache_rb_cache v_nc_tree;
100c92a16eaSkn	TAILQ_HEAD(, namecache) v_cache_dst;	 /* cache entries to us */
101c92a16eaSkn
1028169bd84Sjaredy	void	*v_data;			/* private data for fs */
103c92a16eaSkn	struct	selinfo v_selectinfo;		/* identity of poller(s) */
1048169bd84Sjaredy};
1058169bd84Sjaredy#define	v_mountedhere	v_un.vu_mountedhere
1068169bd84Sjaredy#define	v_socket	v_un.vu_socket
1078169bd84Sjaredy#define	v_specinfo	v_un.vu_specinfo
1088169bd84Sjaredy#define	v_fifoinfo	v_un.vu_fifoinfo
1098169bd84Sjaredy.Ed
1101e2d51ddSart.Ss Vnode life cycle
1111e2d51ddSartWhen a client of the VFS requests a new vnode, the vnode allocation
112fa986dacSdavidcode can reuse an old vnode object that is no longer in use.
113fa986dacSdavidWhether a vnode is in use is tracked by the vnode reference count
1148169bd84Sjaredy.Pq Va v_usecount .
115fa986dacSdavidBy convention, each open file handle holds a reference
116fa986dacSdavidas do VM objects backed by files.
1178169bd84SjaredyA vnode with a reference count of 1 or more will not be deallocated or
1188169bd84Sjaredyreused to point to a different file.
119fa986dacSdavidSo, if you want to ensure that your vnode doesn't become a different
120fa986dacSdavidfile under you, you better be sure you have a reference to it.
121fa986dacSdavidA vnode that points to a valid file and has a reference count of 1 or more
1228169bd84Sjaredyis called
1238169bd84Sjaredy.Em active .
124a21ad506Scsapuntz.Pp
1258169bd84SjaredyWhen a vnode's reference count drops to zero, it becomes
1268169bd84Sjaredy.Em inactive ,
127fa986dacSdavidthat is, a candidate for reuse.
1288169bd84SjaredyAn inactive vnode still refers to a valid file and one can try to
129bf130c27Sjmcreactivate it using
130bf130c27Sjmc.Xr vget 9
131bf130c27Sjmc(this is used a lot by caches).
132d9d782feScsapuntz.Pp
1331e2d51ddSartBefore the VFS can reuse an inactive vnode to refer to another file,
134fa986dacSdavidit must clean all information pertaining to the old file.
1358169bd84SjaredyA cleaned out vnode is called a
1368169bd84Sjaredy.Em reclaimed
1378169bd84Sjaredyvnode.
138d9d782feScsapuntz.Pp
1391e2d51ddSartTo support forceable unmounts and the
1401e2d51ddSart.Xr revoke 2
1418169bd84Sjaredysystem call, the VFS may reclaim a vnode with a positive reference
142fa986dacSdavidcount.
1438169bd84SjaredyThe reclaimed vnode is given to the dead file system, which
144fa986dacSdavidreturns errors for most operations.
145fa986dacSdavidThe reclaimed vnode will not be
1468169bd84Sjaredyreused for another file until its reference count hits zero.
147ea28b879Scsapuntz.Ss Vnode pool
148ea28b879ScsapuntzThe
149ea28b879Scsapuntz.Xr getnewvnode 9
1507e7a0aa3Sjmccall allocates a vnode from the pool, possibly reusing an
1518169bd84Sjaredyinactive vnode, and returns it to the caller.
1528169bd84SjaredyThe vnode returned has a reference count
1538169bd84Sjaredy.Pq Va v_usecount
1548169bd84Sjaredyof 1.
155a21ad506Scsapuntz.Pp
156ea28b879ScsapuntzThe
157ea28b879Scsapuntz.Xr vref 9
1584c8a7c32Smpechcall increments the reference count on the vnode.
1594c8a7c32SmpechIt may only be on a vnode with reference count of 1 or greater.
1604c8a7c32SmpechThe
161ea28b879Scsapuntz.Xr vrele 9
162ea28b879Scsapuntzand
163ea28b879Scsapuntz.Xr vput 9
164ea28b879Scsapuntzcalls decrement the reference count.
165ea28b879ScsapuntzIn addition, the
166ea28b879Scsapuntz.Xr vput 9
167ea28b879Scsapuntzcall also releases the vnode lock.
168a21ad506Scsapuntz.Pp
169b3c75b6fSmpechThe
170ea28b879Scsapuntz.Xr vget 9
1718169bd84Sjaredycall, when used on an inactive vnode, will make the vnode active
1724c8a7c32Smpechby bumping the reference count to one.
1738169bd84SjaredyWhen called on an active vnode,
1748169bd84Sjaredy.Fn vget
1758169bd84Sjaredyincreases the reference count by one.
1768169bd84SjaredyHowever, if the vnode is being reclaimed concurrently, then
1778169bd84Sjaredy.Fn vget
1788169bd84Sjaredywill fail and return an error.
179a21ad506Scsapuntz.Pp
180ea28b879ScsapuntzThe
181ea28b879Scsapuntz.Xr vgone 9
182ea28b879Scsapuntzand
183ea28b879Scsapuntz.Xr vgonel 9
1848169bd84Sjaredycalls
1854c8a7c32Smpechorchestrate the reclamation of a vnode.
1864c8a7c32SmpechThey can be called on both active and inactive vnodes.
187a21ad506Scsapuntz.Pp
1889bd14828SthibWhen transitioning a vnode to the reclaimed state, the VFS will call the
1896e788039Sjmc.Xr VOP_RECLAIM 9
190954ddbd6Smpechmethod.
191a07ef1bdSjmcFile systems use this method to free any file-system-specific data
192d9d782feScsapuntzthey attached to the vnode.
193d9d782feScsapuntz.Ss Vnode locks
194700e48c9SthibThe vnode actually has two different types of locks: the vnode lock
195700e48c9Sthiband the vnode reclamation lock
1968169bd84Sjaredy.Pq Dv VXLOCK .
197be0aed41Scsapuntz.Ss The vnode lock
1981e2d51ddSartThe vnode lock and its consistent use accomplishes the following:
1991e2d51ddSart.Bl -bullet
2001e2d51ddSart.It
2011e2d51ddSartIt keeps a locked vnode from changing across certain pairs of VOP_ calls,
202fa986dacSdavidthus preserving cached data.
203fa986dacSdavidFor example, it keeps the directory from
2048169bd84Sjaredychanging between a
2058169bd84Sjaredy.Xr VOP_LOOKUP 9
2068169bd84Sjaredycall and a
2078169bd84Sjaredy.Xr VOP_CREATE 9 .
2088169bd84SjaredyThe
2098169bd84Sjaredy.Fn VOP_LOOKUP
2108169bd84Sjaredycall makes sure the name doesn't already exist in the
211fa986dacSdaviddirectory and finds free room in the directory for the new entry.
2128169bd84SjaredyThe
2138169bd84Sjaredy.Fn VOP_CREATE
2148169bd84Sjaredycall can then go ahead and create the file without checking if
215fa986dacSdavidit already exists or looking for free space.
2161e2d51ddSart.It
2178169bd84SjaredySome file systems rely on it to ensure that only one
2188169bd84Sjaredy.Dq thread
2198169bd84Sjaredyat a time
220fa986dacSdavidis calling VOP_ vnode operations on a given file or directory.
221fa986dacSdavidOtherwise, the file system's behavior is undefined.
2221e2d51ddSart.It
2231e2d51ddSartOn rare occasions, code will hold the vnode lock so that a series of
224fa986dacSdavidVOP_ operations occurs as an atomic unit.
225fa986dacSdavid(Of course, this doesn't work with network file systems like NFSv2 that don't
226bf130c27Sjmchave any notion of bundling a bunch of operations into an atomic unit.)
2271e2d51ddSart.It
2281e2d51ddSartWhile the vnode lock is held, the vnode will not be reclaimed.
2291e2d51ddSart.El
2301e2d51ddSart.Pp
231fa986dacSdavidThere is a discipline to using the vnode lock.
232fa986dacSdavidSome VOP_ operations require that the vnode lock is held before being called.
2331e2d51ddSart.Pp
2341e2d51ddSartThe vnode lock is acquired by calling
235ea28b879Scsapuntz.Xr vn_lock 9
236ea28b879Scsapuntzand released by calling
2376e788039Sjmc.Xr VOP_UNLOCK 9 .
238a21ad506Scsapuntz.Pp
2391e2d51ddSartA process is allowed to sleep while holding the vnode lock.
240a21ad506Scsapuntz.Pp
241ea28b879ScsapuntzThe implementation of the vnode lock is the responsibility of the individual
242fa986dacSdavidfile systems.
243fa986dacSdavidNot all file systems implement it.
244a21ad506Scsapuntz.Pp
245ea28b879ScsapuntzTo prevent deadlocks, when acquiring locks on multiple vnodes, the lock
246ea28b879Scsapuntzof parent directory must be acquired before the lock on the child directory.
2478169bd84Sjaredy.Ss Other vnode synchronization
2488169bd84SjaredyThe vnode reclamation lock
2498169bd84Sjaredy.Pq Dv VXLOCK
2508169bd84Sjaredyis used to prevent multiple
251b3c75b6fSmpechprocesses from entering the vnode reclamation code.
252b3c75b6fSmpechIt is also used as a flag to indicate that reclamation is in progress.
2538169bd84SjaredyThe
2548169bd84Sjaredy.Dv VXWANT
2558169bd84Sjaredyflag is set by processes that wish to be woken up when reclamation
256b3c75b6fSmpechis finished.
257a21ad506Scsapuntz.Pp
258ea28b879ScsapuntzThe
259ea28b879Scsapuntz.Xr vwaitforio 9
260bf130c27Sjmccall is used to wait for all outstanding write I/Os associated with a
261be0aed41Scsapuntzvnode to complete.
262ea28b879Scsapuntz.Ss Version number/capability
2638169bd84SjaredyThe vnode capability,
2648169bd84Sjaredy.Va v_id ,
2658169bd84Sjaredyis a 32-bit version number on the vnode.
266ea28b879ScsapuntzEvery time a vnode is reassigned to a new file, the vnode capability
267b3c75b6fSmpechis changed.
268bf130c27SjmcThis is used by code that wishes to keep pointers to vnodes but doesn't want
269b3c75b6fSmpechto hold a reference (e.g., caches).
2708169bd84SjaredyThe code keeps both a vnode pointer and a copy of the capability.
271b3c75b6fSmpechThe code can later compare the vnode's capability to its copy and see
272b3c75b6fSmpechif the vnode still points to the same file.
273a21ad506Scsapuntz.Pp
2748169bd84SjaredyNote: for this to work, memory assigned to hold a
2758169bd84Sjaredy.Vt struct vnode
2768169bd84Sjaredycan
277ea28b879Scsapuntzonly be used for another purpose when all pointers to it have disappeared.
278ea28b879ScsapuntzSince the vnode pool has no way of knowing when all pointers have
279ea28b879Scsapuntzdisappeared, it never frees memory it has allocated for vnodes.
280ea28b879Scsapuntz.Ss Vnode fields
281ea28b879ScsapuntzMost of the fields of the vnode structure should be treated as opaque
282b3c75b6fSmpechand only manipulated through the proper APIs.
283b3c75b6fSmpechThis section describes the fields that are manipulated directly.
284a21ad506Scsapuntz.Pp
2858169bd84SjaredyThe
2868169bd84Sjaredy.Va v_flag
2878169bd84Sjaredyattribute contains random flags related to various functions.
2888169bd84SjaredyThey are summarized in the following table:
289a21ad506Scsapuntz.Pp
2908169bd84Sjaredy.Bl -tag -width 10n -compact -offset indent
2918169bd84Sjaredy.It Dv VROOT
2928169bd84SjaredyThis vnode is the root of its file system.
2938169bd84Sjaredy.It Dv VTEXT
2948169bd84SjaredyThis vnode is a pure text prototype.
2958169bd84Sjaredy.It Dv VSYSTEM
2968169bd84SjaredyThis vnode is being used by kernel.
2978169bd84Sjaredy.It Dv VISTTY
2988169bd84SjaredyThis vnode represents a
2998169bd84Sjaredy.Xr tty 4 .
3008169bd84Sjaredy.It Dv VXLOCK
3018169bd84SjaredyThis vnode is locked to change its underlying type.
3028169bd84Sjaredy.It Dv VXWANT
3038169bd84SjaredyA process is waiting for this vnode.
3048169bd84Sjaredy.It Dv VALIASED
3058169bd84SjaredyThis vnode has an alias.
306*05ee8c21Ssemarie.It Dv VLOCKSWORK
307*05ee8c21SsemarieThis vnode's underlying file system supports locking discipline.
3088169bd84Sjaredy.El
3098169bd84Sjaredy.Pp
3108169bd84SjaredyThe
3118169bd84Sjaredy.Va v_tag
3128169bd84Sjaredyattribute indicates what file system the vnode belongs to.
313ea28b879ScsapuntzVery little code actually uses this attribute and its use is deprecated.
314ea28b879ScsapuntzProgrammers should seriously consider using more object-oriented approaches
315b3c75b6fSmpech(e.g. function tables).
3168169bd84SjaredyThere is no safe way of defining new
3178169bd84Sjaredy.Va v_tag Ns 's
3188169bd84Sjaredyfor loadable file systems.
3198169bd84SjaredyThe
3208169bd84Sjaredy.Va v_tag
3218169bd84Sjaredyattribute is read-only.
322a21ad506Scsapuntz.Pp
3238169bd84SjaredyThe
3248169bd84Sjaredy.Va v_type
3258169bd84Sjaredyattribute indicates what type of file (e.g. directory,
3262ead7391Sjmcregular, FIFO) this vnode is.
327bf130c27SjmcThis is used by the generic code for various checks.
328b3c75b6fSmpechFor example, the
329ea28b879Scsapuntz.Xr read 2
3307e25da6aSbluhmsystem call returns zero when a read is attempted on a directory.
331a21ad506Scsapuntz.Pp
3328169bd84SjaredyPossible types are:
3338169bd84Sjaredy.Pp
3348169bd84Sjaredy.Bl -tag -width 10n -offset indent -compact
3358169bd84Sjaredy.It Dv VNON
3368169bd84SjaredyThis vnode has no type.
3378169bd84Sjaredy.It Dv VREG
3388169bd84SjaredyThis vnode represents a regular file.
3398169bd84Sjaredy.It Dv VDIR
3408169bd84SjaredyThis vnode represents a directory.
3418169bd84Sjaredy.It Dv VBLK
3428169bd84SjaredyThis vnode represents a block device.
3438169bd84Sjaredy.It Dv VCHR
3448169bd84SjaredyThis vnode represents a character device.
3458169bd84Sjaredy.It Dv VLNK
3468169bd84SjaredyThis vnode represents a symbolic link.
3478169bd84Sjaredy.It Dv VSOCK
3488169bd84SjaredyThis vnode represents a socket.
3498169bd84Sjaredy.It Dv VFIFO
3508169bd84SjaredyThis vnode represents a named pipe.
3518169bd84Sjaredy.It Dv VBAD
3528169bd84SjaredyThis vnode represents a bad or dead file.
3538169bd84Sjaredy.El
3548169bd84Sjaredy.Pp
3558169bd84SjaredyThe
3568169bd84Sjaredy.Va v_data
3578169bd84Sjaredyattribute allows a file system to attach a piece of file
358b3c75b6fSmpechsystem specific memory to the vnode.
359b3c75b6fSmpechThis contains information about the file that is specific to
3608169bd84Sjaredythe file system (such as an inode pointer in the case of FFS).
361a21ad506Scsapuntz.Pp
3628169bd84SjaredyThe
3638169bd84Sjaredy.Va v_numoutput
3648169bd84Sjaredyattribute indicates the number of pending synchronous
365b3c75b6fSmpechand asynchronous writes on the vnode.
366b3c75b6fSmpechIt does not track the number of dirty buffers attached to the vnode.
3678169bd84SjaredyThe attribute is used by code like
3688169bd84Sjaredy.Xr fsync 2
3698169bd84Sjaredyto wait for all writes
370b3c75b6fSmpechto complete before returning to the user.
3718169bd84SjaredyThis attribute must be manipulated at
3728169bd84Sjaredy.Xr splbio 9 .
373a21ad506Scsapuntz.Pp
3748169bd84SjaredyThe
3758169bd84Sjaredy.Va v_writecount
3768169bd84Sjaredyattribute tracks the number of write calls pending
377be0aed41Scsapuntzon the vnode.
3788169bd84Sjaredy.Ss Rules
379ea28b879ScsapuntzThe vast majority of vnode functions may not be called from interrupt
380b3c75b6fSmpechcontext.
3818169bd84SjaredyThe exceptions are
3828169bd84Sjaredy.Fn bgetvp
3838169bd84Sjaredyand
3848169bd84Sjaredy.Fn brelvp .
385b3c75b6fSmpechThe following fields of the vnode are manipulated at interrupt level:
3868169bd84Sjaredy.Va v_numoutput , v_holdcnt , v_dirtyblkhd ,
3878169bd84Sjaredy.Va v_cleanblkhd , v_bioflag , v_freelist ,
3888169bd84Sjaredyand
3898169bd84Sjaredy.Va v_synclist .
3908169bd84SjaredyAny access to these fields should be protected by
3918169bd84Sjaredy.Xr splbio 9 .
3928169bd84Sjaredy.Sh SEE ALSO
393a54daebfSmpi.Xr uvn_attach 9 ,
3948169bd84Sjaredy.Xr vaccess 9 ,
3958169bd84Sjaredy.Xr vclean 9 ,
3968169bd84Sjaredy.Xr vcount 9 ,
3978169bd84Sjaredy.Xr vdevgone 9 ,
3988169bd84Sjaredy.Xr vfinddev 9 ,
3998169bd84Sjaredy.Xr vflush 9 ,
4008169bd84Sjaredy.Xr vflushbuf 9 ,
4018169bd84Sjaredy.Xr vfs 9 ,
4028169bd84Sjaredy.Xr vget 9 ,
4038169bd84Sjaredy.Xr vgone 9 ,
4048169bd84Sjaredy.Xr vhold 9 ,
4058169bd84Sjaredy.Xr vinvalbuf 9 ,
4068169bd84Sjaredy.Xr vn_lock 9 ,
4078169bd84Sjaredy.Xr VOP_LOOKUP 9 ,
4088169bd84Sjaredy.Xr vput 9 ,
4098169bd84Sjaredy.Xr vrecycle 9 ,
4108169bd84Sjaredy.Xr vref 9 ,
4118169bd84Sjaredy.Xr vrele 9 ,
4128169bd84Sjaredy.Xr vwaitforio 9 ,
4138169bd84Sjaredy.Xr vwakeup 9
414ea28b879Scsapuntz.Sh HISTORY
415ea28b879ScsapuntzThis document first appeared in
416b3c75b6fSmpech.Ox 2.9 .
417