Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
VNODE(9)		    Kernel Developer's Manual			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 vnode is described
     by struct vnode.  There is a unique vnode allocated 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 an-
     other file, possibly in another  file  system.   The  transition  from  the
     freelist  is handled by getnewvnode(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_*()
     functions	to call functions in the file system which implement the vnode's
     functionality.

     The VOP_*()  function  declarations  and  definitions  are  generated  from
     sys/kern/vnode_if.src by the sys/tools/vnode_if.awk script.  The interfaces
     are  documented  in  their  respective  manual  pages  like VOP_READ(9) and
     VOP_WRITE(9).

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 vnode_create_vob-
	    ject().

     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 vnode_create_vob-
	    ject().

     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   Indicates that the vnode has been reclaimed.

IMPLEMENTATION NOTES
     VFIFO uses the "struct fileops" from /sys/kern/sys_pipe.c.  VSOCK uses  the
     "struct fileops" from /sys/kern/sys_socket.c.  Everything 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 interlock, will cause  a
     LOR (Lock Order Reversal) due to the intertwining of VM Objects and Vnodes.

FILES
     sys/kern/vnode_if.src   The input file for sys/tools/vnode_if.awk.
     sys/tools/vnode_if.awk  The  script  generating  the  source  code  of  the
			     VOP_*() functions.

SEE ALSO
     malloc(9), VFS(9), VOP_ACCESS(9), VOP_ACLCHECK(9),  VOP_ADVISE(9),  VOP_AD-
     VLOCK(9),	VOP_ALLOCATE(9),  VOP_ATTRIB(9),  VOP_BWRITE(9),  VOP_CREATE(9),
     VOP_FSYNC(9), VOP_GETACL(9), VOP_GETEXTATTR(9), VOP_GETPAGES(9),  VOP_INAC-
     TIVE(9),	VOP_IOCTL(9),	VOP_LINK(9),   VOP_LISTEXTATTR(9),  VOP_LOCK(9),
     VOP_LOOKUP(9),	VOP_OPENCLOSE(9),     VOP_PATHCONF(9),	   VOP_PRINT(9),
     VOP_RDWR(9),  VOP_READ_PGCACHE(9), VOP_READDIR(9), VOP_READLINK(9), VOP_RE-
     ALLOCBLKS(9), VOP_REMOVE(9), VOP_RENAME(9),  VOP_REVOKE(9),  VOP_SETACL(9),
     VOP_SETEXTATTR(9),    VOP_SETLABEL(9),   VOP_STRATEGY(9),	 VOP_VPTOCNP(9),
     VOP_VPTOFH(9)

AUTHORS
     This manual page was written by Doug Rabson.

FreeBSD ports 15.quarterly	  July 15, 2025 			VNODE(9)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=vnode&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help