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