summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/vnodeops.9 3.html
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:59:05 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:59:05 -0400
commit1f19f33e45791ea59aed048796fc68672c6723a5 (patch)
tree54625fba89e91d1c2177801ec635e8528bba937f /static/netbsd/man9/vnodeops.9 3.html
parentac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (diff)
docs: Removed Precompiled HTML
Diffstat (limited to 'static/netbsd/man9/vnodeops.9 3.html')
-rw-r--r--static/netbsd/man9/vnodeops.9 3.html1441
1 files changed, 0 insertions, 1441 deletions
diff --git a/static/netbsd/man9/vnodeops.9 3.html b/static/netbsd/man9/vnodeops.9 3.html
deleted file mode 100644
index 17e8c6f5..00000000
--- a/static/netbsd/man9/vnodeops.9 3.html
+++ /dev/null
@@ -1,1441 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VNODEOPS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VNODEOPS(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">vnodeops</code>,
- <code class="Nm">VOP_LOOKUP</code>, <code class="Nm">VOP_CREATE</code>,
- <code class="Nm">VOP_MKNOD</code>, <code class="Nm">VOP_OPEN</code>,
- <code class="Nm">VOP_CLOSE</code>, <code class="Nm">VOP_ACCESS</code>,
- <code class="Nm">VOP_GETATTR</code>, <code class="Nm">VOP_SETATTR</code>,
- <code class="Nm">VOP_READ</code>, <code class="Nm">VOP_WRITE</code>,
- <code class="Nm">VOP_FALLOCATE</code>, <code class="Nm">VOP_FDISCARD</code>,
- <code class="Nm">VOP_IOCTL</code>, <code class="Nm">VOP_FCNTL</code>,
- <code class="Nm">VOP_POLL</code>, <code class="Nm">VOP_KQFILTER</code>,
- <code class="Nm">VOP_REVOKE</code>, <code class="Nm">VOP_MMAP</code>,
- <code class="Nm">VOP_FSYNC</code>, <code class="Nm">VOP_SEEK</code>,
- <code class="Nm">VOP_REMOVE</code>, <code class="Nm">VOP_LINK</code>,
- <code class="Nm">VOP_RENAME</code>, <code class="Nm">VOP_MKDIR</code>,
- <code class="Nm">VOP_RMDIR</code>, <code class="Nm">VOP_SYMLINK</code>,
- <code class="Nm">VOP_READDIR</code>, <code class="Nm">VOP_READLINK</code>,
- <code class="Nm">VOP_ABORTOP</code>, <code class="Nm">VOP_INACTIVE</code>,
- <code class="Nm">VOP_RECLAIM</code>, <code class="Nm">VOP_LOCK</code>,
- <code class="Nm">VOP_UNLOCK</code>, <code class="Nm">VOP_ISLOCKED</code>,
- <code class="Nm">VOP_BMAP</code>, <code class="Nm">VOP_PRINT</code>,
- <code class="Nm">VOP_PATHCONF</code>, <code class="Nm">VOP_ADVLOCK</code>,
- <code class="Nm">VOP_WHITEOUT</code>, <code class="Nm">VOP_GETPAGES</code>,
- <code class="Nm">VOP_PUTPAGES</code>, <code class="Nm">VOP_STRATEGY</code>,
- <code class="Nm">VOP_BWRITE</code>, <code class="Nm">VOP_GETEXTATTR</code>,
- <code class="Nm">VOP_SETEXTATTR</code>,
- <code class="Nm">VOP_LISTEXTATTR</code>,
- <code class="Nm">VOP_DELETEEXTATTR</code> &#x2014; <span class="Nd">vnode
- operations</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/buf.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/dirent.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/namei.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/unistd.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/fcntl.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/lockf.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/extattr.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_LOOKUP</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_CREATE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_MKNOD</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_OPEN</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- mode</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_CLOSE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- fflag</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ACCESS</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- mode</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_GETATTR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct vattr
- *vap</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_SETATTR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct vattr
- *vap</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_READ</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">int ioflag</var>,
- <var class="Fa" style="white-space: nowrap;">kauth_cred_t cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_WRITE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">int ioflag</var>,
- <var class="Fa" style="white-space: nowrap;">kauth_cred_t cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_FALLOCATE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">off_t
- pos</var>, <var class="Fa" style="white-space: nowrap;">off_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_FDISCARD</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">off_t
- pos</var>, <var class="Fa" style="white-space: nowrap;">off_t
- len</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_IOCTL</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">u_long
- command</var>, <var class="Fa" style="white-space: nowrap;">void
- *data</var>, <var class="Fa" style="white-space: nowrap;">int fflag</var>,
- <var class="Fa" style="white-space: nowrap;">kauth_cred_t cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_FCNTL</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">u_int
- command</var>, <var class="Fa" style="white-space: nowrap;">void
- *data</var>, <var class="Fa" style="white-space: nowrap;">int fflag</var>,
- <var class="Fa" style="white-space: nowrap;">kauth_cred_t cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_POLL</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- events</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_KQFILTER</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct knote
- *kn</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_REVOKE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_MMAP</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">vm_prot_t
- prot</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_FSYNC</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>,
- <var class="Fa" style="white-space: nowrap;">off_t offlo</var>,
- <var class="Fa" style="white-space: nowrap;">off_t offhi</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_SEEK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">off_t
- oldoff</var>, <var class="Fa" style="white-space: nowrap;">off_t
- newoff</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_REMOVE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *vp</var>, <var class="Fa" style="white-space: nowrap;">struct componentname
- *cnp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_LINK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *vp</var>, <var class="Fa" style="white-space: nowrap;">struct componentname
- *cnp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_RENAME</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *fdvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *fvp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *fcnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vnode *tdvp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vnode *tvp</var>,
- <var class="Fa" style="white-space: nowrap;">struct componentname
- *tcnp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_MKDIR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_RMDIR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *vp</var>, <var class="Fa" style="white-space: nowrap;">struct componentname
- *cnp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_SYMLINK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>,
- <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>,
- <var class="Fa" style="white-space: nowrap;">char *target</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_READDIR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>, <var class="Fa" style="white-space: nowrap;">int *eofflag</var>,
- <var class="Fa" style="white-space: nowrap;">off_t **cookies</var>,
- <var class="Fa" style="white-space: nowrap;">int *ncookies</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_READLINK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ABORTOP</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_INACTIVE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_RECLAIM</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_LOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_UNLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ISLOCKED</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_BMAP</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">daddr_t
- bn</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>, <var class="Fa" style="white-space: nowrap;">daddr_t
- *bnp</var>, <var class="Fa" style="white-space: nowrap;">int
- *runp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_PRINT</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_PATHCONF</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- name</var>, <var class="Fa" style="white-space: nowrap;">register_t
- *retval</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_ADVLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">void
- *id</var>, <var class="Fa" style="white-space: nowrap;">int op</var>,
- <var class="Fa" style="white-space: nowrap;">struct flock *fl</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_WHITEOUT</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct
- componentname *cnp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_GETPAGES</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">voff_t
- offset</var>, <var class="Fa" style="white-space: nowrap;">struct vm_page
- **m</var>, <var class="Fa" style="white-space: nowrap;">int *count</var>,
- <var class="Fa" style="white-space: nowrap;">int centeridx</var>,
- <var class="Fa" style="white-space: nowrap;">vm_prot_t access_type</var>,
- <var class="Fa" style="white-space: nowrap;">int advice</var>,
- <var class="Fa" style="white-space: nowrap;">int flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_PUTPAGES</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">voff_t
- offlo</var>, <var class="Fa" style="white-space: nowrap;">voff_t
- offhi</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_STRATEGY</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct buf
- *bp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_BWRITE</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct buf
- *bp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_GETEXTATTR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- attrnamespace</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">size_t *size</var>,
- <var class="Fa" style="white-space: nowrap;">kauth_cred_t cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_SETEXTATTR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- attrnamespace</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_LISTEXTATTR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- attrnamespace</var>, <var class="Fa" style="white-space: nowrap;">struct uio
- *uio</var>, <var class="Fa" style="white-space: nowrap;">size_t *size</var>,
- <var class="Fa" style="white-space: nowrap;">kauth_cred_t cred</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VOP_DELETEEXTATTR</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int
- attrnamespace</var>, <var class="Fa" style="white-space: nowrap;">const char
- *name</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>);</p>
-<p class="Pp">Not all header files are required for each function.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The vnode operations vector describes what operations can be done
- to the file associated with the vnode. The system maintains one vnode
- operations vector for each file system type configured into the kernel. The
- vnode operations vector contains a pointer to a function for each operation
- supported by the file system. Many of the functions described in the vnode
- operations vector are closely related to their corresponding system calls.
- In most cases, they are called as a result of the system call associated
- with the operation being invoked.</p>
-<p class="Pp">Functions in the vnode operations vector are invoked using
- specialized macros. The following table gives a summary of the
- operations.</p>
-<p class="Pp"></p>
-<table class="Bl-column Bl-compact">
- <tr id="Macro">
- <td><a class="permalink" href="#Macro"><b class="Sy">Macro</b></a></td>
- <td><a class="permalink" href="#Description"><b class="Sy" id="Description">Description</b></a></td>
- </tr>
- <tr>
- <td>VOP_LOOKUP</td>
- <td>Lookup file name in name cache</td>
- </tr>
- <tr>
- <td>VOP_CREATE</td>
- <td>Create a new file</td>
- </tr>
- <tr>
- <td>VOP_MKNOD</td>
- <td>Make a new device</td>
- </tr>
- <tr>
- <td>VOP_OPEN</td>
- <td>Open a file</td>
- </tr>
- <tr>
- <td>VOP_CLOSE</td>
- <td>Close a file</td>
- </tr>
- <tr>
- <td>VOP_ACCESS</td>
- <td>Determine file accessibility</td>
- </tr>
- <tr>
- <td>VOP_GETATTR</td>
- <td>Get file attributes</td>
- </tr>
- <tr>
- <td>VOP_SETATTR</td>
- <td>Set file attributes</td>
- </tr>
- <tr>
- <td>VOP_READ</td>
- <td>Read from a file</td>
- </tr>
- <tr>
- <td>VOP_WRITE</td>
- <td>Write to a file</td>
- </tr>
- <tr>
- <td>VOP_FALLOCATE</td>
- <td>Allocate backing for a file</td>
- </tr>
- <tr>
- <td>VOP_FDISCARD</td>
- <td>Discard backing for a file</td>
- </tr>
- <tr>
- <td>VOP_IOCTL</td>
- <td>Perform device-specific I/O</td>
- </tr>
- <tr>
- <td>VOP_FCNTL</td>
- <td>Perform file control</td>
- </tr>
- <tr>
- <td>VOP_POLL</td>
- <td>Test if poll event has occurred</td>
- </tr>
- <tr>
- <td>VOP_KQFILTER</td>
- <td>Register a knote</td>
- </tr>
- <tr>
- <td>VOP_REVOKE</td>
- <td>Eliminate vnode activity</td>
- </tr>
- <tr>
- <td>VOP_MMAP</td>
- <td>Map file into user address space</td>
- </tr>
- <tr>
- <td>VOP_FSYNC</td>
- <td>Flush pending data to disk</td>
- </tr>
- <tr>
- <td>VOP_SEEK</td>
- <td>Test if file is seekable</td>
- </tr>
- <tr>
- <td>VOP_REMOVE</td>
- <td>Remove a file</td>
- </tr>
- <tr>
- <td>VOP_LINK</td>
- <td>Link a file</td>
- </tr>
- <tr>
- <td>VOP_RENAME</td>
- <td>Rename a file</td>
- </tr>
- <tr>
- <td>VOP_MKDIR</td>
- <td>Make a new directory</td>
- </tr>
- <tr>
- <td>VOP_RMDIR</td>
- <td>Remove a directory</td>
- </tr>
- <tr>
- <td>VOP_SYMLINK</td>
- <td>Create a symbolic link</td>
- </tr>
- <tr>
- <td>VOP_READDIR</td>
- <td>Read directory entry</td>
- </tr>
- <tr>
- <td>VOP_READLINK</td>
- <td>Read contents of a symlink</td>
- </tr>
- <tr>
- <td>VOP_ABORTOP</td>
- <td>Abort pending operation</td>
- </tr>
- <tr>
- <td>VOP_INACTIVE</td>
- <td>Release the inactive vnode</td>
- </tr>
- <tr>
- <td>VOP_RECLAIM</td>
- <td>Reclaim vnode for another file</td>
- </tr>
- <tr>
- <td>VOP_LOCK</td>
- <td>Sleep until vnode lock is free</td>
- </tr>
- <tr>
- <td>VOP_UNLOCK</td>
- <td>Wake up process sleeping on lock</td>
- </tr>
- <tr>
- <td>VOP_ISLOCKED</td>
- <td>Test if vnode is locked</td>
- </tr>
- <tr>
- <td>VOP_BMAP</td>
- <td>Logical block number conversion</td>
- </tr>
- <tr>
- <td>VOP_PRINT</td>
- <td>Print debugging information</td>
- </tr>
- <tr>
- <td>VOP_PATHCONF</td>
- <td>Return POSIX pathconf data</td>
- </tr>
- <tr>
- <td>VOP_ADVLOCK</td>
- <td>Advisory record locking</td>
- </tr>
- <tr>
- <td>VOP_WHITEOUT</td>
- <td>Whiteout vnode</td>
- </tr>
- <tr>
- <td>VOP_GETPAGES</td>
- <td>Read VM pages from file</td>
- </tr>
- <tr>
- <td>VOP_PUTPAGES</td>
- <td>Write VM pages to file</td>
- </tr>
- <tr>
- <td>VOP_STRATEGY</td>
- <td>Read/write a file system buffer</td>
- </tr>
- <tr>
- <td>VOP_BWRITE</td>
- <td>Write a file system buffer</td>
- </tr>
- <tr>
- <td>VOP_GETEXTATTR</td>
- <td>Get extended attribute</td>
- </tr>
- <tr>
- <td>VOP_SETEXTATTR</td>
- <td>Set extended attribute</td>
- </tr>
- <tr>
- <td>VOP_LISTEXTATTR</td>
- <td>List extended attributes</td>
- </tr>
- <tr>
- <td>VOP_DELETEEXTATTR</td>
- <td>Remove extended attribute</td>
- </tr>
-</table>
-<p class="Pp">The implementation details of the vnode operations vector are not
- quite what is described here.</p>
-<p class="Pp">If the file system type does not support a specific operation, it
- must nevertheless assign an appropriate stub in the vnode operations vector
- to do the minimum required of it. In most cases, such functions either do
- nothing or return an error value to the effect that it is not supported.</p>
-<p class="Pp">Many of the functions in the vnode operations vector take a
- componentname structure. It is used to encapsulate many parameters into a
- single function argument. It has the following structure:</p>
-<div class="Bd Pp Li">
-<pre>struct componentname {
- /*
- * Arguments to lookup.
- */
- uint32_t cn_nameiop; /* namei operation */
- uint32_t cn_flags; /* flags to namei */
- kauth_cred_t cn_cred; /* credentials */
- /*
- * Shared between lookup and commit routines.
- */
- const char *cn_nameptr; /* pointer to looked up name */
- size_t cn_namelen; /* length of looked up component */
- size_t cn_consume; /* chars to consume in lookup() */
-};</pre>
-</div>
-<p class="Pp" id="VOP_LOOKUP">The top half of the structure is used exclusively
- for the pathname lookups using
- <a class="permalink" href="#VOP_LOOKUP"><code class="Fn">VOP_LOOKUP</code></a>()
- and is initialized by the caller. The semantics of the lookup are affected
- by the lookup operation specified in
- <a class="permalink" href="#cn_nameiop"><i class="Em" id="cn_nameiop">cn_nameiop</i></a>
- and the flags specified in
- <a class="permalink" href="#cn_flags"><i class="Em" id="cn_flags">cn_flags</i></a>.
- Valid operations are:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt>LOOKUP</dt>
- <dd>perform name lookup only</dd>
- <dt>CREATE</dt>
- <dd>set up for file creation</dd>
- <dt>DELETE</dt>
- <dd>set up for file deletion</dd>
- <dt>RENAME</dt>
- <dd>set up for file renaming</dd>
- <dt>OPMASK</dt>
- <dd>mask for operation</dd>
-</dl>
-</div>
-<p class="Pp" id="cn-_cn_flags">Valid values for
- <a class="permalink" href="#cn-_cn_flags"><i class="Em">cn-&gt;cn_flags</i></a>
- are:</p>
-<p class="Pp"></p>
-<div class="Bd-indent">
-<dl class="Bl-tag Bl-compact">
- <dt>LOCKLEAF</dt>
- <dd>lock inode on return</dd>
- <dt>LOCKPARENT</dt>
- <dd>want parent vnode returned locked</dd>
- <dt>NOCACHE</dt>
- <dd>name must not be left in name cache (see
- <a class="Xr">namecache(9)</a>)</dd>
- <dt>FOLLOW</dt>
- <dd>follow symbolic links</dd>
- <dt>NOFOLLOW</dt>
- <dd>do not follow symbolic links (pseudo)</dd>
- <dt>MODMASK</dt>
- <dd>mask of operational modifiers</dd>
-</dl>
-</div>
-<p class="Pp">No vnode operations may be called from interrupt context. Most
- operations also require the vnode to be locked on entry. To prevent
- deadlocks, when acquiring locks on multiple vnodes, the lock of parent
- directory must be acquired before the lock on the child directory.</p>
-<p class="Pp">Vnode operations for a file system type generally should not be
- called directly from the kernel, but accessed indirectly through the
- high-level convenience functions discussed in
- <a class="Xr">vnsubr(9)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<dl class="Bl-tag">
- <dt id="VOP_LOOKUP~2"><a class="permalink" href="#VOP_LOOKUP~2"><code class="Fn">VOP_LOOKUP</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">vpp</var>, <var class="Fa">cnp</var>)</dt>
- <dd>Lookup a single pathname component in a given directory. The argument
- <var class="Fa">dvp</var> is the locked vnode of the directory to search
- and <var class="Fa">cnp</var> is the pathname component to be searched
- for. If the pathname component is found, the address of the resulting
- unlocked vnode is returned in <var class="Fa">vpp</var>. The operation
- specified in
- <a class="permalink" href="#cnp-_cn_nameiop"><i class="Em" id="cnp-_cn_nameiop">cnp-&gt;cn_nameiop</i></a>
- indicates <code class="Fn">VOP_LOOKUP</code>() the reason for requesting
- the lookup and uses it to cache file system type specific information in
- the vnode for subsequent operations.
- <p class="Pp" id="VOP_LOOKUP~3">There are three types of lookups:
- &quot;.&quot;, &quot;..&quot; (ISDOTDOT), and regular. If the pathname
- component being searched for is &quot;.&quot;, then
- <var class="Fa">dvp</var> has an extra reference added to it and it is
- returned in <var class="Fa">*vpp</var>. For other pathname components,
- <a class="permalink" href="#VOP_LOOKUP~3"><code class="Fn">VOP_LOOKUP</code></a>()
- checks the accessibility of the directory and searches the name cache
- for the pathname component. See <a class="Xr">namecache(9)</a>. If the
- pathname is not found in the name cache, the directory is searched for
- the pathname. The resulting unlocked vnode is returned in
- <var class="Fa">vpp</var>. <var class="Fa">dvp</var> is always returned
- locked.</p>
- <p class="Pp">On failure <var class="Fa">*vpp</var> is
- <code class="Dv">NULL</code>, and <var class="Fa">*dvp</var> is left
- locked. If the operation is successful <var class="Fa">*vpp</var> is
- unlocked and zero is returned. Typically, if <var class="Fa">*vpp</var>
- and <var class="Fa">dvp</var> are the same vnode the caller will need to
- release twice (decrement the reference count) and unlock once.</p>
- </dd>
- <dt id="VOP_CREATE"><a class="permalink" href="#VOP_CREATE"><code class="Fn">VOP_CREATE</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">vpp</var>, <var class="Fa">cnp</var>,
- <var class="Fa">vap</var>)</dt>
- <dd>Create a new file in a given directory. The argument
- <var class="Fa">dvp</var> is the locked vnode of the directory to create
- the new file in and <var class="Fa">cnp</var> is the pathname component of
- the new file. The argument <var class="Fa">vap</var> specifies the
- attributes that the new file should be created with. If the file is
- successfully created, the address of the resulting unlocked vnode is
- returned in <var class="Fa">vpp</var> and zero is returned.
- <p class="Pp" id="VOP_LOOKUP~4">This function is called after
- <a class="permalink" href="#VOP_LOOKUP~4"><code class="Fn">VOP_LOOKUP</code></a>()
- when a file is being created. Normally,
- <code class="Fn">VOP_LOOKUP</code>() will have set the SAVENAME flag in
- <i class="Em">cnp-&gt;cn_flags</i> to keep the memory pointed to by
- <i class="Em">cnp-&gt;cn_pnbuf</i> valid. If an error is detected when
- creating the file, this memory is released. If the file is created
- successfully it will be released unless the SAVESTART flags in specified
- in <i class="Em">cnp-&gt;cn_flags</i>.</p>
- </dd>
- <dt id="VOP_MKNOD"><a class="permalink" href="#VOP_MKNOD"><code class="Fn">VOP_MKNOD</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">vpp</var>, <var class="Fa">cnp</var>,
- <var class="Fa">vap</var>)</dt>
- <dd>Make a new device-special file in a given directory. The argument
- <var class="Fa">dvp</var> is the locked vnode of the directory to create
- the new device-special file in and <var class="Fa">cnp</var> is the
- pathname component of the new device-special file. The argument
- <var class="Fa">vap</var> specifies the attributes that the new
- device-special file should be created with. If the file is successfully
- created, the address of the resulting unlocked vnode is returned in
- <var class="Fa">vpp</var> and zero is returned.
- <p class="Pp" id="VOP_LOOKUP~5">This function is called after
- <a class="permalink" href="#VOP_LOOKUP~5"><code class="Fn">VOP_LOOKUP</code></a>()
- when a device-special file is being created. Normally,
- <code class="Fn">VOP_LOOKUP</code>() will have set the SAVENAME flag in
- <i class="Em">cnp-&gt;cn_flags</i> to keep the memory pointed to by
- <i class="Em">cnp-&gt;cn_pnbuf</i> valid. If an error is detected when
- creating the device-special file, this memory is released. If the
- device-special file is created successfully it will be released unless
- the SAVESTART flags in specified in
- <i class="Em">cnp-&gt;cn_flags</i>.</p>
- </dd>
- <dt><code class="Fn">VOP_OPEN</code>(<var class="Fa">vp</var>,
- <var class="Fa">mode</var>, <var class="Fa">cred</var>)</dt>
- <dd>Open a file. The argument <var class="Fa">vp</var> is the vnode of the
- file to open and <var class="Fa">mode</var> specifies the access mode
- required by the calling process. The calling credentials are specified by
- <var class="Fa">cred</var>. The access mode is a set of flags, including
- FREAD, FWRITE, O_NONBLOCK, O_APPEND, etc.
- <code class="Fn">VOP_OPEN</code>() must be called before a file can be
- accessed by a thread. The vnode reference count is incremented.
- <p class="Pp" id="VOP_OPEN"><a class="permalink" href="#VOP_OPEN"><code class="Fn">VOP_OPEN</code></a>()
- expects the vnode <var class="Fa">vp</var> to be locked on entry and
- will leave it locked on return. If the operation is successful zero is
- returned, otherwise an appropriate error code is returned.</p>
- </dd>
- <dt id="VOP_CLOSE"><a class="permalink" href="#VOP_CLOSE"><code class="Fn">VOP_CLOSE</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">fflag</var>, <var class="Fa">cred</var>)</dt>
- <dd>Close a file. The argument <var class="Fa">vp</var> is the vnode of the
- file to close and <var class="Fa">fflag</var> specifies the access mode by
- the calling process. The possible flags are <code class="Dv">FREAD</code>,
- <code class="Dv">FWRITE</code> and <code class="Dv">FNONBLOCK</code>. The
- calling credentials are specified by <var class="Fa">cred</var>.
- <code class="Fn">VOP_CLOSE</code>() frees resources allocated by
- <code class="Fn">VOP_OPEN</code>().
- <p class="Pp">The vnode <var class="Fa">vp</var> will be locked on entry and
- should remain locked on return.</p>
- </dd>
- <dt id="VOP_ACCESS"><a class="permalink" href="#VOP_ACCESS"><code class="Fn">VOP_ACCESS</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">mode</var>, <var class="Fa">cred</var>)</dt>
- <dd>Determine the accessibility (permissions) of the file against the
- specified credentials. The argument <var class="Fa">vp</var> is the vnode
- of the file to check, <var class="Fa">mode</var> is the type of access
- required and <var class="Fa">cred</var> contains the user credentials to
- check. The argument <var class="Fa">mode</var> is a mask which can contain
- VREAD, VWRITE or VEXEC. If the file is accessible in the specified way,
- zero is returned, otherwise an appropriate error code is returned.
- <p class="Pp">The vnode <var class="Fa">vp</var> will be locked on entry and
- should remain locked on return.</p>
- </dd>
- <dt id="VOP_GETATTR"><a class="permalink" href="#VOP_GETATTR"><code class="Fn">VOP_GETATTR</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">vap</var>, <var class="Fa">cred</var>)</dt>
- <dd>Get specific vnode attributes on a file. The argument
- <var class="Fa">vp</var> is the vnode of the file to get the attributes
- for. The argument <var class="Fa">cred</var> specifies the calling
- credentials. <code class="Fn">VOP_GETATTR</code>() uses the file system
- type specific data object <i class="Em">vp-&gt;v_data</i> to reference the
- underlying file attributes. The attributes are returned in
- <var class="Fa">vap</var>. Attributes which are not available are set to
- the value VNOVAL.
- <p class="Pp" id="VOP_GETATTR~2">For more information on vnode attributes
- see <a class="Xr">vattr(9)</a>. Historically it was considered
- acceptable to call
- <a class="permalink" href="#VOP_GETATTR~2"><code class="Fn">VOP_GETATTR</code></a>()
- without first locking the vnode. This usage is deprecated.</p>
- <p class="Pp">The vnode <var class="Fa">vp</var> will be locked on entry and
- should remain locked on return.</p>
- </dd>
- <dt id="VOP_SETATTR"><a class="permalink" href="#VOP_SETATTR"><code class="Fn">VOP_SETATTR</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">vap</var>, <var class="Fa">cred</var>)</dt>
- <dd>Set specific vnode attributes on a file. The argument
- <var class="Fa">vp</var> is the locked vnode of the file to set the
- attributes for. The argument <var class="Fa">cred</var> specifies the
- calling credentials. <code class="Fn">VOP_SETATTR</code>() uses the file
- system type specific data object <i class="Em">vp-&gt;v_data</i> to
- reference the underlying file attributes. The new attributes are defined
- in <var class="Fa">vap</var>. Attributes which are not being modified by
- <code class="Fn">VOP_SETATTR</code>() should be set to the value VNOVAL.
- If the operation is successful zero is returned, otherwise an appropriate
- error is returned.
- <p class="Pp">For more information on vnode attributes see
- <a class="Xr">vattr(9)</a>.</p>
- </dd>
- <dt id="VOP_READ"><a class="permalink" href="#VOP_READ"><code class="Fn">VOP_READ</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">uio</var>, <var class="Fa">ioflag</var>,
- <var class="Fa">cred</var>)</dt>
- <dd>Read the contents of a file. The argument <var class="Fa">vp</var> is the
- vnode of the file to read from, <var class="Fa">uio</var> is the location
- to read the data into, <var class="Fa">ioflag</var> is a set of flags and
- <var class="Fa">cred</var> are the credentials of the calling process.
- <p class="Pp">The <var class="Fa">ioflag</var> argument is used to give
- directives and hints to the file system. When attempting a read, the
- high 16 bits are used to provide a read-ahead hint (in unit of file
- system blocks) that the file system should attempt. The low 16 bits are
- a bit mask which can contain the following flags:</p>
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt>IO_UNIT</dt>
- <dd>do I/O as atomic unit</dd>
- <dt>IO_APPEND</dt>
- <dd>append write to end</dd>
- <dt>IO_SYNC</dt>
- <dd>sync I/O file integrity completion</dd>
- <dt>IO_NODELOCKED</dt>
- <dd>underlying node already locked</dd>
- <dt>IO_NDELAY</dt>
- <dd>FNDELAY flag set in file table</dd>
- <dt>IO_DSYNC</dt>
- <dd>sync I/O data integrity completion</dd>
- <dt>IO_ALTSEMANTICS</dt>
- <dd>use alternate I/O semantics</dd>
- <dt>IO_NORMAL</dt>
- <dd>operate on regular data</dd>
- <dt>IO_EXT</dt>
- <dd>operate on extended attributes</dd>
- <dt>IO_DIRECT</dt>
- <dd>do not buffer data in the kernel</dd>
- </dl>
- </div>
- <p class="Pp">Zero is returned on success, otherwise an error is returned.
- The vnode should be locked on entry and remains locked on exit.</p>
- </dd>
- <dt id="VOP_WRITE"><a class="permalink" href="#VOP_WRITE"><code class="Fn">VOP_WRITE</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">uio</var>, <var class="Fa">ioflag</var>,
- <var class="Fa">cred</var>)</dt>
- <dd>Write to a file. The argument <var class="Fa">vp</var> is the vnode of the
- file to write to, <var class="Fa">uio</var> is the location of the data to
- write, <var class="Fa">ioflag</var> is a set of flags and
- <var class="Fa">cred</var> are the credentials of the calling process.
- <p class="Pp" id="VOP_READ~2">The <var class="Fa">ioflag</var> argument is
- used to give directives and hints to the file system. The low 16 bits
- are a bit mask which can contain the same flags as
- <a class="permalink" href="#VOP_READ~2"><code class="Fn">VOP_READ</code></a>().</p>
- <p class="Pp">Zero is returned on success, otherwise an error is returned.
- The vnode should be locked on entry and remains locked on exit.</p>
- </dd>
- <dt id="VOP_FALLOCATE"><a class="permalink" href="#VOP_FALLOCATE"><code class="Fn">VOP_FALLOCATE</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">pos</var>, <var class="Fa">len</var>)</dt>
- <dd>Allocate backing store. The argument <var class="Fa">vp</var> is the vnode
- for the file. The <var class="Fa">pos</var> and <var class="Fa">len</var>
- arguments (specified in bytes) name an extent within the file. The blocks
- underlying this range, rounding up at the top and down at the bottom if
- needed, are checked; if no physical storage is allocated, a physical block
- is allocated and zeroed. This operation removes &#x201C;holes&#x201D; from
- files.</dd>
- <dt id="VOP_FDISCARD"><a class="permalink" href="#VOP_FDISCARD"><code class="Fn">VOP_FDISCARD</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">pos</var>, <var class="Fa">len</var>)</dt>
- <dd>Discard backing store. The argument <var class="Fa">vp</var> is the vnode
- for the file. The <var class="Fa">pos</var> and <var class="Fa">len</var>
- arguments (specified in bytes) name an extent within the file. The blocks
- underlying this range, rounding down at the top and up at the bottom if
- needed, are checked. If any physical storage is used, it is deallocated.
- This operation creates &#x201C;holes&#x201D; in files. Discarded blocks of
- regular files read back afterwards as zeroes. On devices, the underlying
- discard-block operation if any (e.g. ATA TRIM) is issued. The device
- handles this as it sees fit. In particular it is
- <a class="permalink" href="#not"><i class="Em" id="not">not</i></a>
- guaranteed that discarded blocks on devices will be zeroed; reading a
- discarded block might produce zeros, or ones, or the previously existing
- data, or some other data, or trash.</dd>
- <dt><code class="Fn">VOP_IOCTL</code>(<var class="Fa">vp</var>,
- <var class="Fa">command</var>, <var class="Fa">data</var>,
- <var class="Fa">fflag</var>, <var class="Fa">cred</var>)</dt>
- <dd>Perform device-specific I/O. The argument <var class="Fa">vp</var> is the
- vnode of the file, normally representing a device. The argument
- <var class="Fa">command</var> specifies the device-specific operation to
- perform and <var class="Fa">cnp</var> provides extra data for the
- specified operation. The argument <var class="Fa">fflags</var> is a set of
- flags. The argument <var class="Fa">cred</var> is the caller's
- credentials. If the operation is successful, zero is returned, otherwise
- an appropriate error code is returned.
- <p class="Pp" id="VOP_IOCTL">Most file systems do not supply a function for
- <a class="permalink" href="#VOP_IOCTL"><code class="Fn">VOP_IOCTL</code></a>().
- This function implements the <a class="Xr">ioctl(2)</a> system call.</p>
- </dd>
- <dt id="VOP_FCNTL"><a class="permalink" href="#VOP_FCNTL"><code class="Fn">VOP_FCNTL</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">command</var>, <var class="Fa">data</var>,
- <var class="Fa">fflag</var>, <var class="Fa">cred</var>)</dt>
- <dd>Perform file control. The argument <var class="Fa">vp</var> is the locked
- vnode of the file. The argument <var class="Fa">command</var> specifies
- the operation to perform and <var class="Fa">cnp</var> provides extra data
- for the specified operation. The argument <var class="Fa">fflags</var> is
- a set of flags. The argument <var class="Fa">cred</var> is the caller's
- credentials. If the operation is successful, zero is returned, otherwise
- an appropriate error code is returned.</dd>
- <dt id="VOP_POLL"><a class="permalink" href="#VOP_POLL"><code class="Fn">VOP_POLL</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">events</var>)</dt>
- <dd>Test if a poll event has occurred. The argument <var class="Fa">vp</var>
- is the vnode of the file to poll. It returns any events of interest as
- specified by <var class="Fa">events</var> that may have occurred for the
- file. The argument <var class="Fa">events</var> is a set of flags as
- specified by <a class="Xr">poll(2)</a>.
- <p class="Pp">The vnode <var class="Fa">vp</var> remains unlocked throughout
- the whole operation.</p>
- </dd>
- <dt id="VOP_KQFILTER"><a class="permalink" href="#VOP_KQFILTER"><code class="Fn">VOP_KQFILTER</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">kn</var>)</dt>
- <dd>Register a knote <var class="Fa">kn</var> with the vnode
- <var class="Fa">vn</var>. If the operation is successful zero is returned,
- otherwise an appropriate error code is returned.
- <p class="Pp">The vnode <var class="Fa">vp</var> remains unlocked throughout
- the whole operation.</p>
- </dd>
- <dt id="VOP_REVOKE"><a class="permalink" href="#VOP_REVOKE"><code class="Fn">VOP_REVOKE</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>Eliminate all activity associated with the vnode <var class="Fa">vp</var>.
- The argument <var class="Fa">flags</var> is a set of flags. If REVOKEALL
- is set in <var class="Fa">flags</var> all vnodes aliased to the vnode
- <var class="Fa">vp</var> are also eliminated. If the operation is
- successful zero is returned, otherwise an appropriate error is returned.
- <p class="Pp">The vnode <var class="Fa">vp</var> remains unlocked throughout
- the whole operation.</p>
- </dd>
- <dt id="VOP_MMAP"><a class="permalink" href="#VOP_MMAP"><code class="Fn">VOP_MMAP</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">prot</var>, <var class="Fa">cred</var>)</dt>
- <dd>Inform file system that <var class="Fa">vp</var> is in the process of
- being memory mapped. The argument <var class="Fa">prot</var> specifies the
- vm access protection the vnode is going to be mapped with. The argument
- <var class="Fa">cred</var> is the caller's credentials. If the file system
- allows the memory mapping, zero is returned, otherwise an appropriate
- error code is returned.
- <p class="Pp" id="VOP_MMAP~2">Most file systems do not supply a function for
- <a class="permalink" href="#VOP_MMAP~2"><code class="Fn">VOP_MMAP</code></a>()
- and use
- <a class="permalink" href="#genfs_mmap"><code class="Fn" id="genfs_mmap">genfs_mmap</code></a>()
- to default for success. Only file systems which do not integrate with
- the page cache at all typically want to disallow memory mapping.</p>
- </dd>
- <dt id="VOP_FSYNC"><a class="permalink" href="#VOP_FSYNC"><code class="Fn">VOP_FSYNC</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">cred</var>, <var class="Fa">flags</var>,
- <var class="Fa">offlo</var>, <var class="Fa">offhi</var>)</dt>
- <dd>Flush pending data buffers for a file to disk. The argument
- <var class="Fa">vp</var> is the locked vnode of the file for flush. The
- argument <var class="Fa">cred</var> is the caller's credentials. The
- argument <var class="Fa">flags</var> is a set of flags. If FSYNC_WAIT is
- specified in <var class="Fa">flags</var>, the function should wait for I/O
- to complete before returning. The argument <var class="Fa">offlo</var> and
- <var class="Fa">offhi</var> specify the range of file to flush. If the
- operation is successful zero is returned, otherwise an appropriate error
- code is returned.
- <p class="Pp">This function implements the <a class="Xr">sync(2)</a> and
- <a class="Xr">fsync(2)</a> system calls.</p>
- </dd>
- <dt id="VOP_SEEK"><a class="permalink" href="#VOP_SEEK"><code class="Fn">VOP_SEEK</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">oldoff</var>, <var class="Fa">newoff</var>,
- <var class="Fa">cred</var>)</dt>
- <dd>Test if the file is seekable for the specified offset
- <var class="Fa">newoff</var>. The argument <var class="Fa">vp</var> is the
- locked vnode of the file to test. For most file systems this function
- simply tests if <var class="Fa">newoff</var> is valid. If the specified
- <var class="Fa">newoff</var> is less than zero, the function returns error
- code EINVAL.</dd>
- <dt id="VOP_REMOVE"><a class="permalink" href="#VOP_REMOVE"><code class="Fn">VOP_REMOVE</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">vp</var>, <var class="Fa">cnp</var>)</dt>
- <dd>Remove a file. The argument <var class="Fa">dvp</var> is the locked vnode
- of the directory to remove the file from and <var class="Fa">vp</var> is
- the locked vnode of the file to remove. The argument
- <var class="Fa">cnp</var> is the pathname component about the file to
- remove. If the operation is successful zero is returned, otherwise an
- appropriate error code is returned. Both <var class="Fa">dvp</var> and
- <var class="Fa">vp</var> are locked on entry and are to be unlocked before
- returning.</dd>
- <dt id="VOP_LINK"><a class="permalink" href="#VOP_LINK"><code class="Fn">VOP_LINK</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">vp</var>, <var class="Fa">cnp</var>)</dt>
- <dd>Link to a file. The argument <var class="Fa">dvp</var> is the locked node
- of the directory to create the new link and <var class="Fa">vp</var> is
- the vnode of the file to be linked. The argument <var class="Fa">cnp</var>
- is the pathname component of the new link. If the operation is successful
- zero is returned, otherwise an error code is returned. The directory vnode
- <var class="Fa">dvp</var> should be locked on entry and will be released
- and unlocked on return. The vnode <var class="Fa">vp</var> should not be
- locked on entry and will remain unlocked on return.</dd>
- <dt><code class="Fn">VOP_RENAME</code>(<var class="Fa">fdvp</var>,
- <var class="Fa">fvp</var>, <var class="Fa">fcnp</var>,
- <var class="Fa">tdvp</var>, <var class="Fa">tvp</var>,
- <var class="Fa">tcnp</var>)</dt>
- <dd>Rename a file. The argument <var class="Fa">fdvp</var> is the vnode of the
- old parent directory containing in the file to be renamed and
- <var class="Fa">fvp</var> is the vnode of the file to be renamed. The
- argument <var class="Fa">fcnp</var> is the pathname component about the
- file to be renamed. The argument <var class="Fa">tdvp</var> is the vnode
- of the new directory of the target file and <var class="Fa">tvp</var> is
- the vnode of the target file (if it exists). The argument
- <var class="Fa">tcnp</var> is the pathname component about the file's new
- name. If the operation is successful zero is returned, otherwise an error
- code is returned.
- <p class="Pp" id="VOP_RENAME">The caller must hold the target file system's
- rename lock. The source directory and file vnodes should be unlocked and
- their reference counts should be incremented before entry. The target
- directory and file vnodes should both be locked on entry.
- <a class="permalink" href="#VOP_RENAME"><code class="Fn">VOP_RENAME</code></a>()
- updates the reference counts prior to returning.</p>
- <p class="Pp" id="VOP_RENAME~2">Because of the complexity and nastiness of
- the interface, please do not write new code that calls
- <a class="permalink" href="#VOP_RENAME~2"><code class="Fn">VOP_RENAME</code></a>()
- directly until such time as ongoing cleanup work reaches a point where
- the interface has been rendered halfway sane.</p>
- </dd>
- <dt id="VOP_MKDIR"><a class="permalink" href="#VOP_MKDIR"><code class="Fn">VOP_MKDIR</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">vpp</var>, <var class="Fa">cnp</var>,
- <var class="Fa">vap</var>)</dt>
- <dd>Make a new directory in a given directory. The argument
- <var class="Fa">dvp</var> is the locked vnode of the directory to create
- the new directory in and <var class="Fa">cnp</var> is the pathname
- component of the new directory. The argument <var class="Fa">vap</var>
- specifies the attributes that the new directory should be created with. If
- the file is successfully created, the address of the resulting unlocked
- vnode is returned in <var class="Fa">vpp</var> and zero is returned.
- <p class="Pp" id="VOP_LOOKUP~6">This function is called after
- <a class="permalink" href="#VOP_LOOKUP~6"><code class="Fn">VOP_LOOKUP</code></a>()
- when a directory is being created. Normally,
- <code class="Fn">VOP_LOOKUP</code>() will have set the SAVENAME flag in
- <i class="Em">cnp-&gt;cn_flags</i> to keep the memory pointed to by
- <i class="Em">cnp-&gt;cn_pnbuf</i> valid. If an error is detected when
- creating the directory, this memory is released. If the directory is
- created successfully it will be released unless the SAVESTART flags in
- specified in <i class="Em">cnp-&gt;cn_flags</i>.</p>
- </dd>
- <dt id="VOP_RMDIR"><a class="permalink" href="#VOP_RMDIR"><code class="Fn">VOP_RMDIR</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">vp</var>, <var class="Fa">cnp</var>)</dt>
- <dd>Remove a directory in a given directory. The argument
- <var class="Fa">dvp</var> is the locked vnode of the directory to remove
- the directory from and <var class="Fa">vp</var> is the locked vnode of the
- directory to remove. The argument <var class="Fa">cnp</var> is the
- pathname component of the directory. Zero is returned on success,
- otherwise an error code is returned. Both <var class="Fa">dvp</var> and
- <var class="Fa">vp</var> should be locked on entry and will be released
- and unlocked on return.</dd>
- <dt id="VOP_SYMLINK"><a class="permalink" href="#VOP_SYMLINK"><code class="Fn">VOP_SYMLINK</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">vpp</var>, <var class="Fa">cnp</var>,
- <var class="Fa">vap</var>, <var class="Fa">target</var>)</dt>
- <dd>Create a symbolic link in a given directory. The argument
- <var class="Fa">dvp</var> is the locked vnode of the directory to create
- the symbolic link in and <var class="Fa">cnp</var> is the pathname
- component of the symbolic link. The argument <var class="Fa">vap</var>
- specifies the attributes that the symbolic link should be created with and
- <var class="Fa">target</var> specifies the pathname of the target of the
- symbolic link. If the symbolic link is successfully created, the address
- of the resulting unlocked vnode is returned in <var class="Fa">vpp</var>
- and zero is returned.
- <p class="Pp" id="VOP_LOOKUP~7">This function is called after
- <a class="permalink" href="#VOP_LOOKUP~7"><code class="Fn">VOP_LOOKUP</code></a>()
- when a symbolic link is being created. Normally,
- <code class="Fn">VOP_LOOKUP</code>() will have set the SAVENAME flag in
- <i class="Em">cnp-&gt;cn_flags</i> to keep the memory pointed to by
- <i class="Em">cnp-&gt;cn_pnbuf</i> valid. If an error is detected when
- creating the symbolic link, this memory is released. If the symbolic
- link is created successfully it will be released unless the SAVESTART
- flags in specified in <i class="Em">cnp-&gt;cn_flags</i>.</p>
- </dd>
- <dt><code class="Fn">VOP_READDIR</code>(<var class="Fa">vp</var>,
- <var class="Fa">uio</var>, <var class="Fa">cred</var>,
- <var class="Fa">eofflag</var>, <var class="Fa">cookies</var>,
- <var class="Fa">ncookies</var>)</dt>
- <dd>Read directory entry. The argument <var class="Fa">vp</var> is the vnode
- of the directory to read the contents of and <var class="Fa">uio</var> is
- the destination location to read the contents into. The argument
- <var class="Fa">cred</var> is the caller's credentials. The argument
- <var class="Fa">eofflag</var> is the pointer to a flag which is set by
- <code class="Fn">VOP_READDIR</code>() to indicate an end-of-file
- condition. If <var class="Fa">eofflag</var> is
- <code class="Dv">NULL</code>, the end-of-file condition is not returned.
- The arguments <var class="Fa">cookies</var> and
- <var class="Fa">ncookies</var> specify the addresses for the list and
- number of directory seek cookies generated for NFS. Both
- <var class="Fa">cookies</var> and <var class="Fa">ncookies</var> should be
- <code class="Dv">NULL</code> if they aren't required to be returned by
- <code class="Fn">VOP_READDIR</code>(). The directory contents are read
- into struct dirent structures and <var class="Fa">uio-&gt;uio_offset</var>
- is set to the offset of the next unread directory entry. This offset may
- be used in a following invocation to continue a sequential read of the
- directory contents. If the operation is successful zero is returned,
- otherwise an appropriate error code is returned.
- <p class="Pp">The directory should be locked on entry and will remain locked
- on return.</p>
- <p class="Pp">In case <var class="Fa">ncookies</var> and
- <var class="Fa">cookies</var> are supplied, one cookie should be
- returned per directory entry. The value of the cookie for each directory
- entry should be the offset within the directory where the on-disk
- version of the following directory entry starts. That is, for each
- directory entry <var class="Fa">i</var>, the corresponding cookie should
- refer to the offset of directory entry <var class="Fa">i + 1</var>.</p>
- <p class="Pp" id="VOP_READDIR">Note that the <var class="Fa">cookies</var>
- array must be allocated by the callee using the M_TEMP malloc type as
- callers of
- <a class="permalink" href="#VOP_READDIR"><code class="Fn">VOP_READDIR</code></a>()
- must be able to free the allocation.</p>
- </dd>
- <dt id="VOP_READLINK"><a class="permalink" href="#VOP_READLINK"><code class="Fn">VOP_READLINK</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">uio</var>, <var class="Fa">cred</var>)</dt>
- <dd>Read the contents of a symbolic link. The argument
- <var class="Fa">vp</var> is the locked vnode of the symlink and
- <var class="Fa">uio</var> is the destination location to read the contents
- into. The argument <var class="Fa">cred</var> is the credentials of the
- caller. If the operation is successful zero is returned, otherwise an
- error code is returned.
- <p class="Pp">The vnode should be locked on entry and will remain locked on
- return.</p>
- </dd>
- <dt id="VOP_ABORTOP"><a class="permalink" href="#VOP_ABORTOP"><code class="Fn">VOP_ABORTOP</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">cnp</var>)</dt>
- <dd>Abort pending operation on vnode <var class="Fa">dvp</var> and free
- resources allocated in <var class="Fa">cnp</var>.
- <p class="Pp" id="genfs_abortop">This operation is rarely implemented in
- file systems and
- <a class="permalink" href="#genfs_abortop"><code class="Fn">genfs_abortop</code></a>()
- is typically used instead.</p>
- </dd>
- <dt id="VOP_INACTIVE"><a class="permalink" href="#VOP_INACTIVE"><code class="Fn">VOP_INACTIVE</code></a>(<var class="Fa">vp</var>)</dt>
- <dd>Release the inactive vnode. <code class="Fn">VOP_INACTIVE</code>() is
- called when the kernel is no longer using the vnode. This may be because
- the reference count reaches zero or it may be that the file system is
- being forcibly unmounted while there are open files. It can be used to
- reclaim space for open but deleted files. The argument
- <var class="Fa">vp</var> is the locked vnode to be released. If the
- operation is successful zero is returned, otherwise an appropriate error
- code is returned. The vnode <var class="Fa">vp</var> must be locked on
- entry, and will remain locked on return.</dd>
- <dt id="VOP_RECLAIM"><a class="permalink" href="#VOP_RECLAIM"><code class="Fn">VOP_RECLAIM</code></a>(<var class="Fa">vp</var>)</dt>
- <dd>Reclaim the vnode for another file system.
- <code class="Fn">VOP_RECLAIM</code>() is called when a vnode is being
- reused for a different file system. Any file system specific resources
- associated with the vnode should be freed. The argument
- <var class="Fa">vp</var> is the vnode to be reclaimed. If the operation is
- successful zero is returned, otherwise an appropriate error code is
- returned. The vnode <var class="Fa">vp</var> should be locked on entry,
- and will be returned unlocked.</dd>
- <dt id="VOP_LOCK"><a class="permalink" href="#VOP_LOCK"><code class="Fn">VOP_LOCK</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>Sleep until vnode lock is free. The argument <var class="Fa">vp</var> is
- the vnode of the file to be locked. The argument
- <var class="Fa">flags</var> is <code class="Dv">LK_EXCLUSIVE</code> to
- take the lock exclusively or <code class="Dv">LK_SHARED</code> to take a
- shared lock. If <var class="Fa">flags</var> contains
- <code class="Dv">LK_NOWAIT</code> and the lock is busy, the operation will
- return immediately with an error code. If <var class="Fa">flags</var>
- contains <code class="Dv">LK_RETRY</code> this is a hint the caller wants
- the lock on dead vnodes too. If the operation is successful zero is
- returned, otherwise an appropriate error code is returned.
- <code class="Fn">VOP_LOCK</code>() is used to serialize access to the file
- system such as to prevent two writes to the same file from happening at
- the same time. Kernel code should use <a class="Xr">vn_lock(9)</a> to lock
- a vnode rather than calling <code class="Fn">VOP_LOCK</code>()
- directly.</dd>
- <dt id="VOP_UNLOCK"><a class="permalink" href="#VOP_UNLOCK"><code class="Fn">VOP_UNLOCK</code></a>(<var class="Fa">vp</var>)</dt>
- <dd>Wake up process sleeping on lock. The argument <var class="Fa">vp</var> is
- the vnode of the file to be unlocked. If the operation is successful zero
- is returned, otherwise an appropriate error code is returned.
- <code class="Fn">VOP_UNLOCK</code>() is used to serialize access to the
- file system such as to prevent two writes to the same file from happening
- at the same time.</dd>
- <dt id="VOP_ISLOCKED"><a class="permalink" href="#VOP_ISLOCKED"><code class="Fn">VOP_ISLOCKED</code></a>(<var class="Fa">vp</var>)</dt>
- <dd>Test if the vnode <var class="Fa">vp</var> is locked. Possible return
- values are <code class="Dv">LK_EXCLUSIVE</code>,
- <code class="Dv">LK_SHARED</code> or 0 for lock held exclusively by the
- calling thread, shared lock held by anyone or unlocked, respectively.
- <p class="Pp">This function must never be used to make locking decisions at
- run time: it is provided only for diagnostic purposes.</p>
- </dd>
- <dt id="VOP_BMAP"><a class="permalink" href="#VOP_BMAP"><code class="Fn">VOP_BMAP</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">bn</var>, <var class="Fa">vpp</var>,
- <var class="Fa">bnp</var>, <var class="Fa">runp</var>)</dt>
- <dd>Convert the logical block number <var class="Fa">bn</var> of a file
- specified by vnode <var class="Fa">vp</var> to its physical block number
- on the disk. The physical block is returned in <var class="Fa">bnp</var>.
- In case the logical block is not allocated, -1 is used.
- <p class="Pp">If <var class="Fa">vpp</var> is not
- <code class="Dv">NULL</code>, the vnode of the device vnode for the file
- system is returned in the address specified by
- <var class="Fa">vpp</var>. If <var class="Fa">runp</var> is not
- <code class="Dv">NULL</code>, the number of contiguous blocks starting
- from the next block after the queried block will be returned in
- <var class="Fa">runp</var>.</p>
- </dd>
- <dt id="VOP_PRINT"><a class="permalink" href="#VOP_PRINT"><code class="Fn">VOP_PRINT</code></a>(<var class="Fa">vp</var>)</dt>
- <dd>Print debugging information. The argument <var class="Fa">vp</var> is the
- vnode to print. If the operation is successful zero is returned, otherwise
- an appropriate error code is returned.</dd>
- <dt id="VOP_PATHCONF"><a class="permalink" href="#VOP_PATHCONF"><code class="Fn">VOP_PATHCONF</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">name</var>, <var class="Fa">retval</var>)</dt>
- <dd>Implement POSIX <a class="Xr">pathconf(2)</a> and
- <a class="Xr">fpathconf(2)</a> support. The argument
- <var class="Fa">vp</var> is the locked vnode to get information about. The
- argument <var class="Fa">name</var> specified the type of information to
- return. The information is returned in the address specified by
- <var class="Fa">retval</var>. Valid values for <var class="Fa">name</var>
- are:
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt>_PC_LINK_MAX</dt>
- <dd>return the maximum number of links to a file</dd>
- <dt>_PC_NAME_MAX</dt>
- <dd>return the maximum number of bytes in a file name</dd>
- <dt>_PC_PATH_MAX</dt>
- <dd>return the maximum number of bytes in a pathname</dd>
- <dt>_PC_PIPE_BUF</dt>
- <dd>return the maximum number of bytes which will be written atomically to
- a pipe</dd>
- <dt>_PC_CHOWN_RESTRICTED</dt>
- <dd>return 1 if appropriate privileges are required for the
- <a class="Xr">chown(2)</a> system call, otherwise zero</dd>
- <dt>_PC_NO_TRUNC</dt>
- <dd>return 0 if file names longer than {<code class="Dv">NAME_MAX</code>}
- are silently truncated</dd>
- </dl>
- </div>
- <p class="Pp">If <var class="Fa">name</var> is recognized,
- <var class="Fa">*retval</var> is set to the specified value and zero is
- returned, otherwise an appropriate error is returned.</p>
- </dd>
- <dt id="VOP_ADVLOCK"><a class="permalink" href="#VOP_ADVLOCK"><code class="Fn">VOP_ADVLOCK</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">id</var>, <var class="Fa">op</var>,
- <var class="Fa">fl</var>, <var class="Fa">flags</var>)</dt>
- <dd>Manipulate Advisory record locks on a vnode. The argument
- <var class="Fa">vp</var> is the vnode on which locks are manipulated. The
- argument <var class="Fa">id</var> is the id token which is changing the
- lock and <var class="Fa">op</var> is the <a class="Xr">fcntl(2)</a>
- operation to perform. Valid values are:
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt>F_SETLK</dt>
- <dd>set lock</dd>
- <dt>F_GETLK</dt>
- <dd>get the first conflicted lock</dd>
- <dt>F_UNLCK</dt>
- <dd>clear lock</dd>
- </dl>
- </div>
- <p class="Pp" id="VOP_ADVLOCK~2">The argument <var class="Fa">fl</var> is a
- description of the lock. In the case of
- <code class="Dv">SEEK_CUR</code>, The caller should add the current file
- offset to fl-&gt;l_start beforehand.
- <a class="permalink" href="#VOP_ADVLOCK~2"><code class="Fn">VOP_ADVLOCK</code></a>()
- treats <code class="Dv">SEEK_CUR</code> as
- <code class="Dv">SEEK_SET</code>.</p>
- <p class="Pp">The argument <var class="Fa">flags</var> is the set of flags.
- Valid values are:</p>
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt>F_WAIT</dt>
- <dd>wait until lock is granted</dd>
- <dt>F_FLOCK</dt>
- <dd>use <a class="Xr">flock(2)</a> semantics for lock</dd>
- <dt>F_POSIX</dt>
- <dd>use POSIX semantics for lock</dd>
- </dl>
- </div>
- <p class="Pp">If the operation is successful zero is returned, otherwise an
- appropriate error is returned.</p>
- </dd>
- <dt id="VOP_WHITEOUT"><a class="permalink" href="#VOP_WHITEOUT"><code class="Fn">VOP_WHITEOUT</code></a>(<var class="Fa">dvp</var>,
- <var class="Fa">cnp</var>, <var class="Fa">flags</var>)</dt>
- <dd>Whiteout pathname component in directory with vnode
- <var class="Fa">dvp</var>. The argument <var class="Fa">cnp</var>
- specifies the pathname component to whiteout.
- <p class="Pp">The vnode <var class="Fa">dvp</var> should be locked on entry
- and will remain locked on return.</p>
- </dd>
- <dt id="VOP_GETPAGES"><a class="permalink" href="#VOP_GETPAGES"><code class="Fn">VOP_GETPAGES</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">offset</var>, <var class="Fa">m</var>,
- <var class="Fa">count</var>, <var class="Fa">centeridx</var>,
- <var class="Fa">access_type</var>, <var class="Fa">advice</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>Read VM pages from file. The argument <var class="Fa">vp</var> is the
- locked vnode to read the VM pages from. The argument
- <var class="Fa">offset</var> is offset in the file to start accessing and
- <var class="Fa">m</var> is an array of VM pages. The argument
- <var class="Fa">count</var> points a variable that specifies the number of
- pages to read. If the operation is successful zero is returned, otherwise
- an appropriate error code is returned. If PGO_LOCKED is specified in
- <a class="permalink" href="#flags"><i class="Em" id="flags">flags</i></a>,
- <code class="Fn">VOP_GETPAGES</code>() might return less pages than
- requested. In that case, the variable pointed to by
- <a class="permalink" href="#count"><i class="Em" id="count">count</i></a>
- will be updated.
- <p class="Pp">This function is primarily used by the page-fault handing
- mechanism.</p>
- </dd>
- <dt id="VOP_PUTPAGES"><a class="permalink" href="#VOP_PUTPAGES"><code class="Fn">VOP_PUTPAGES</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">offlo</var>, <var class="Fa">offhi</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>Write modified (dirty) VM pages to file. The argument
- <var class="Fa">vp</var> is the vnode to write the VM pages to. The
- vnode's vm object lock (<var class="Va">v_uobj.vmobjlock</var>) must be
- held by the caller and will be released upon return. The arguments
- <var class="Fa">offlo</var> and <var class="Fa">offhi</var> specify the
- range of VM pages to write. In case <var class="Fa">offhi</var> is given
- as 0, all pages at and after the start offset <var class="Fa">offlo</var>
- belonging the vnode <var class="Fa">vp</var> will be written. The argument
- <var class="Fa">flags</var> controls the behavior of the routine and takes
- the vm pager's flags (<code class="Dv">PGO_ -prefixed</code>). If the
- operation is successful zero is returned, otherwise an appropriate error
- code is returned.
- <p class="Pp" id="genfs_putpages">The function is primarily used by the
- pageout handling mechanism and is commonly implemented indirectly by
- <a class="permalink" href="#genfs_putpages"><code class="Fn">genfs_putpages</code></a>()
- with the help of
- <a class="permalink" href="#VOP_STRATEGY"><code class="Fn" id="VOP_STRATEGY">VOP_STRATEGY</code></a>()
- and <code class="Fn">VOP_BMAP</code>().</p>
- </dd>
- <dt id="bp-_b_flags"><code class="Fn">VOP_STRATEGY</code>(<var class="Fa">vp</var>,
- <var class="Fa">bp</var>)</dt>
- <dd>Read/write a file system buffer. The argument <var class="Fa">vp</var> is
- the vnode to read/write to. The argument <var class="Fa">bp</var> is the
- buffer to be read or written. <code class="Fn">VOP_STRATEGY</code>() will
- either read or write data to the file depending on the value of
- <a class="permalink" href="#bp-_b_flags"><i class="Em">bp-&gt;b_flags</i></a>.
- If the operation is successful zero is returned, otherwise an appropriate
- error code is returned.</dd>
- <dt id="VOP_BWRITE"><a class="permalink" href="#VOP_BWRITE"><code class="Fn">VOP_BWRITE</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">bp</var>)</dt>
- <dd>Write a file system buffer. The argument <var class="Fa">vp</var> is the
- vnode to write to. The argument <var class="Fa">bp</var> specifies the
- buffer to be written. If the operation is successful zero is returned,
- otherwise an appropriate error code is returned.</dd>
- <dt id="VOP_GETEXTATTR"><a class="permalink" href="#VOP_GETEXTATTR"><code class="Fn">VOP_GETEXTATTR</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">attrnamespace</var>, <var class="Fa">name</var>,
- <var class="Fa">uio</var>, <var class="Fa">size</var>,
- <var class="Fa">cred</var>)</dt>
- <dd>Get an extended attribute. The argument <var class="Fa">vp</var> is the
- locked vnode of the file or directory from which to retrieve the
- attribute. The argument <var class="Fa">attrnamespace</var> specifies the
- extended attribute namespace. The argument <var class="Fa">name</var> is a
- nul-terminated character string naming the attribute to retrieve. The
- argument <var class="Fa">uio</var>, if not <code class="Dv">NULL</code>,
- specifies where the extended attribute value is to be written. The
- argument <var class="Fa">size</var>, if not <code class="Dv">NULL</code>,
- will contain the number of bytes required to read all of the attribute
- data upon return. In most cases, <var class="Fa">uio</var> will be
- <code class="Dv">NULL</code> when <var class="Fa">size</var> is not, and
- vice versa. The argument <var class="Fa">cred</var> specifies the user
- credentials to use when authorizing the request.</dd>
- <dt id="VOP_SETEXTATTR"><a class="permalink" href="#VOP_SETEXTATTR"><code class="Fn">VOP_SETEXTATTR</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">attrnamespace</var>, <var class="Fa">name</var>,
- <var class="Fa">uio</var>, <var class="Fa">cred</var>)</dt>
- <dd>Set an extended attribute. The argument <var class="Fa">vp</var> is the
- locked vnode of the file or directory to which to store the attribute. The
- argument <var class="Fa">namespace</var> specifies the extended attribute
- namespace. The argument <var class="Fa">name</var> is a nul-terminated
- character string naming the attribute to store. The argument
- <var class="Fa">uio</var> specifies the source of the extended attribute
- data. The argument <var class="Fa">cred</var> specifies the user
- credentials to use when authorizing the request.</dd>
- <dt id="VOP_LISTEXTATTR"><a class="permalink" href="#VOP_LISTEXTATTR"><code class="Fn">VOP_LISTEXTATTR</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">attrnamespace</var>, <var class="Fa">uio</var>,
- <var class="Fa">size</var>, <var class="Fa">cred</var>)</dt>
- <dd>Retrieve the list of extended attributes. The argument
- <var class="Fa">vp</var> is the locked vnode of the file or directory
- whose attributes are to be listed. The argument
- <var class="Fa">attrnamespace</var> specifies the extended attribute
- namespace. The argument <var class="Fa">uio</var>, if not
- <code class="Dv">NULL</code>, specifies where the extended attribute list
- is to be written. The argument <var class="Fa">size</var>, if not
- <code class="Dv">NULL</code>, will contain the number of bytes required to
- read all of the attribute names upon return. In most cases,
- <var class="Fa">uio</var> will be <code class="Dv">NULL</code> when
- <var class="Fa">size</var> is not, and vice versa. The argument
- <var class="Fa">cred</var> specifies the user credentials to use when
- authorizing the request.</dd>
- <dt id="VOP_DELETEEXTATTR"><a class="permalink" href="#VOP_DELETEEXTATTR"><code class="Fn">VOP_DELETEEXTATTR</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">attrnamespace</var>, <var class="Fa">name</var>,
- <var class="Fa">cred</var>)</dt>
- <dd>Remove attribute <var class="Fa">name</var> from file associated with
- <var class="Fa">vp</var>. The argument <var class="Fa">attrnamespace</var>
- specifies the extended attribute namespace. If full removal is not
- supported, the file system should return
- <code class="Er">EOPNOTSUPP</code> to allow the caller to zero out the
- value with <code class="Fn">VOP_SETEXTATTR</code>().
- <p class="Pp">The vnode <var class="Fa">vp</var> should be locked on entry
- and will remain locked on return.</p>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
-<p class="Pp"><span class="Pa">src/sys/kern/vnode_if.src</span> contains the
- list of vnode functions, their definitions and an exact locking
- protocol.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1>
-<dl class="Bl-tag">
- <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt>
- <dd>Access for the specified operation is denied.</dd>
- <dt id="EDQUOT">[<a class="permalink" href="#EDQUOT"><code class="Er">EDQUOT</code></a>]</dt>
- <dd>Quota exceeded.</dd>
- <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt>
- <dd>attempt to read from an illegal offset in the directory; unrecognized
- input</dd>
- <dt id="EIO">[<a class="permalink" href="#EIO"><code class="Er">EIO</code></a>]</dt>
- <dd>a read error occurred while reading the directory or reading the contents
- of a symbolic link</dd>
- <dt id="EJUSTRETURN">[<a class="permalink" href="#EJUSTRETURN"><code class="Er">EJUSTRETURN</code></a>]</dt>
- <dd>A CREATE or RENAME operation would be successful.</dd>
- <dt id="ENOATTR">[<a class="permalink" href="#ENOATTR"><code class="Er">ENOATTR</code></a>]</dt>
- <dd>The requested attribute is not defined for this vnode.</dd>
- <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt>
- <dd>The component was not found in the directory.</dd>
- <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt>
- <dd>The file system is full.</dd>
- <dt id="ENOTDIR">[<a class="permalink" href="#ENOTDIR"><code class="Er">ENOTDIR</code></a>]</dt>
- <dd>The vnode does not represent a directory.</dd>
- <dt id="ENOTEMPTY">[<a class="permalink" href="#ENOTEMPTY"><code class="Er">ENOTEMPTY</code></a>]</dt>
- <dd>attempt to remove a directory which is not empty</dd>
- <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt>
- <dd>an attempt was made to change an immutable file</dd>
- <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt>
- <dd>the file system is read-only</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">extattr(9)</a>, <a class="Xr">intro(9)</a>,
- <a class="Xr">namei(9)</a>, <a class="Xr">vattr(9)</a>,
- <a class="Xr">vfs(9)</a>, <a class="Xr">vfsops(9)</a>,
- <a class="Xr">vnode(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The vnode operations vector, its functions and the corresponding
- macros appeared in <span class="Ux">4.3BSD</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">June 15, 2023</td>
- <td class="foot-os">NetBSD 10.1</td>
- </tr>
-</table>