vnode(9)
NAME
vnode - internal representation of a file or directory
SYNOPSIS
#include <sys/param.h> #include <sys/vnode.h>
DESCRIPTION
- The vnode is the focus of all file activity in UNIX. A vn
- ode is
described by struct vnode. There is a unique vnode allocat - ed for each
active file, each current directory, each mounted-on file, - text file, and
the root. - Each vnode has three reference counts, v_usecount, v_holdcnt
- and
v_writecount. The first is the number of clients within the - kernel which
are using this vnode. This count is maintained by vref(9), - vrele(9) and
vput(9). The second is the number of clients within the - kernel who veto
the recycling of this vnode. This count is maintained by - vhold(9) and
vdrop(9). When both the v_usecount and the v_holdcnt of a - vnode reaches
zero then the vnode will be put on the freelist and may be - reused for
another file, possibly in another file system. The transi - tion to and
from the freelist is handled by getnewvnode(9), vfree(9) and - vbusy(9).
The third is a count of the number of clients which are - writing into the
file. It is maintained by the open(2) and close(2) system - calls.
- Any call which returns a vnode (e.g. vget(9), VOP_LOOKUP(9)
- etc.) will
increase the v_usecount of the vnode by one. When the - caller is finished
with the vnode, it should release this reference by calling - vrele(9) (or
vput(9) if the vnode is locked). - Other commonly used members of the vnode structure are v_id
- which is used
to maintain consistency in the name cache, v_mount which - points at the
file system which owns the vnode, v_type which contains the - type of
object the vnode represents and v_data which is used by file - systems to
store file system specific data with the vnode. The v_op - field is used
by the VOP_* macros to call functions in the file system - which implement
the vnode's functionality.
VNODE TYPES
VNON No type.
- VREG A regular file; may be with or without VM object
- backing. If you
- want to make sure this get a backing object, call
vfs_object_create(9). - VDIR A directory.
- VBLK A block device; may be with or without VM object
- backing. If you
- want to make sure this get a backing object, call
vfs_object_create(9). - VCHR A character device.
- VLNK A symbolic link.
- VSOCK A socket. Advisory locking will not work on this.
- VFIFO A FIFO (named pipe). Advisory locking will not work
- on this.
- VBAD An old style bad sector map
IMPLEMENTATION NOTES
- VFIFO uses the "struct fileops" from /sys/kern/sys_pipe.c.
- VSOCK uses
the "struct fileops" from /sys/kern/sys_socket.c. Every - thing else uses
the one from /sys/kern/vfs_vnops.c. - The VFIFO/VSOCK code, which is why "struct fileops" is used
- at all, is an
artifact of an incomplete integration of the VFS code into - the kernel.
- Calls to malloc(9) or free(9) when holding a vnode inter
- lock, will cause
a LOR (Lock Order Reversal) due to the intertwining of VM - Objects and
Vnodes.
SEE ALSO
AUTHORS
- This manual page was written by Doug Rabson.
- BSD May 20, 2003