summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/vfsops.9 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/vfsops.9 3.html')
-rw-r--r--static/netbsd/man9/vfsops.9 3.html461
1 files changed, 0 insertions, 461 deletions
diff --git a/static/netbsd/man9/vfsops.9 3.html b/static/netbsd/man9/vfsops.9 3.html
deleted file mode 100644
index 0466fe6d..00000000
--- a/static/netbsd/man9/vfsops.9 3.html
+++ /dev/null
@@ -1,461 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">VFSOPS(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">VFSOPS(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">vfsops</code>, <code class="Nm">VFS_MOUNT</code>,
- <code class="Nm">VFS_START</code>, <code class="Nm">VFS_UNMOUNT</code>,
- <code class="Nm">VFS_ROOT</code>, <code class="Nm">VFS_QUOTACTL</code>,
- <code class="Nm">VFS_STATVFS</code>, <code class="Nm">VFS_SYNC</code>,
- <code class="Nm">VFS_VGET</code>, <code class="Nm">VFS_LOADVNODE</code>,
- <code class="Nm">VFS_NEWVNODE</code>, <code class="Nm">VFS_FHTOVP</code>,
- <code class="Nm">VFS_VPTOFH</code>, <code class="Nm">VFS_SNAPSHOT</code>,
- <code class="Nm">VFS_SUSPENDCTL</code> &#x2014; <span class="Nd">kernel file
- system interface</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/mount.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/vnode.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_MOUNT</code>(<var class="Fa">struct mount *mp</var>,
- <var class="Fa">const char *path</var>, <var class="Fa">void *data</var>,
- <var class="Fa">size_t *dlen</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_START</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_UNMOUNT</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- mntflags</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_ROOT</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- lktype</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- **vpp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_QUOTACTL</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct
- quotactl_args *args</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_STATVFS</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct statvfs
- *sbp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_SYNC</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- waitfor</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">VFS_VGET</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">ino_t
- ino</var>, <var class="Fa" style="white-space: nowrap;">int lktype</var>,
- <var class="Fa" style="white-space: nowrap;">struct vnode **vpp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_LOADVNODE</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *vp</var>, <var class="Fa" style="white-space: nowrap;">const void
- *key</var>, <var class="Fa" style="white-space: nowrap;">size_t
- key_len</var>, <var class="Fa" style="white-space: nowrap;">const void
- **new_key</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_NEWVNODE</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <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 vattr
- *vap</var>, <var class="Fa" style="white-space: nowrap;">kauth_cred_t
- cred</var>, <var class="Fa" style="white-space: nowrap;">void *extra</var>,
- <var class="Fa" style="white-space: nowrap;">size_t *key_len</var>,
- <var class="Fa" style="white-space: nowrap;">const void
- **new_key</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_FHTOVP</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct fid
- *fhp</var>, <var class="Fa" style="white-space: nowrap;">int lktype</var>,
- <var class="Fa" style="white-space: nowrap;">struct vnode **vpp</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_VPTOFH</code>(<var class="Fa" style="white-space: nowrap;">struct
- vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct fid
- *fhp</var>, <var class="Fa" style="white-space: nowrap;">size_t
- *fh_size</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_SNAPSHOT</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode
- *vp</var>, <var class="Fa" style="white-space: nowrap;">struct timespec
- *ts</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">VFS_SUSPENDCTL</code>(<var class="Fa" style="white-space: nowrap;">struct
- mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int
- cmd</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">In a similar fashion to the <a class="Xr">vnode(9)</a> interface,
- all operations that are done on a file system are conducted through a single
- interface that allows the system to carry out operations on a file system
- without knowing its construction or type.</p>
-<p class="Pp">All supported file systems in the kernel have an entry in the
- <var class="Va">vfs_list_initial</var> table. This table is generated by
- <a class="Xr">config(1)</a> and is a
- <code class="Dv">NULL</code><span class="No">-terminated</span> list of
- <var class="Vt">vfsops</var> structures. The vfsops structure describes the
- operations that can be done to a specific file system type. The following
- table lists the elements of the vfsops vector, the corresponding invocation
- macro, and a description of the element.</p>
-<p class="Pp"></p>
-<table class="Bl-column Bl-compact">
- <tr id="Vector">
- <td><a class="permalink" href="#Vector"><b class="Sy">Vector
- element</b></a></td>
- <td><a class="permalink" href="#Macro"><b class="Sy" id="Macro">Macro</b></a></td>
- <td><a class="permalink" href="#Description"><b class="Sy" id="Description">Description</b></a></td>
- </tr>
- <tr id="VFS_MOUNT">
- <td>int (*vfs_mount)()</td>
- <td><a class="permalink" href="#VFS_MOUNT"><code class="Dv">VFS_MOUNT</code></a></td>
- <td>Mount a file system</td>
- </tr>
- <tr id="VFS_START">
- <td>int (*vfs_start)()</td>
- <td><a class="permalink" href="#VFS_START"><code class="Dv">VFS_START</code></a></td>
- <td>Make operational</td>
- </tr>
- <tr id="VFS_UNMOUNT">
- <td>int (*vfs_unmount)()</td>
- <td><a class="permalink" href="#VFS_UNMOUNT"><code class="Dv">VFS_UNMOUNT</code></a></td>
- <td>Unmount a file system</td>
- </tr>
- <tr id="VFS_ROOT">
- <td>int (*vfs_root)()</td>
- <td><a class="permalink" href="#VFS_ROOT"><code class="Dv">VFS_ROOT</code></a></td>
- <td>Get the file system root vnode</td>
- </tr>
- <tr id="VFS_QUOTACTL">
- <td>int (*vfs_quotactl)()</td>
- <td><a class="permalink" href="#VFS_QUOTACTL"><code class="Dv">VFS_QUOTACTL</code></a></td>
- <td>Query/modify space quotas</td>
- </tr>
- <tr id="VFS_STATVFS">
- <td>int (*vfs_statvfs)()</td>
- <td><a class="permalink" href="#VFS_STATVFS"><code class="Dv">VFS_STATVFS</code></a></td>
- <td>Get file system statistics</td>
- </tr>
- <tr id="VFS_SYNC">
- <td>int (*vfs_sync)()</td>
- <td><a class="permalink" href="#VFS_SYNC"><code class="Dv">VFS_SYNC</code></a></td>
- <td>Flush file system buffers</td>
- </tr>
- <tr id="VFS_VGET">
- <td>int (*vfs_vget)()</td>
- <td><a class="permalink" href="#VFS_VGET"><code class="Dv">VFS_VGET</code></a></td>
- <td>Get vnode from file id</td>
- </tr>
- <tr id="VFS_LOADVNODE">
- <td>int (*vfs_loadvnode)()</td>
- <td><a class="permalink" href="#VFS_LOADVNODE"><code class="Dv">VFS_LOADVNODE</code></a></td>
- <td>Initialize vnode with file</td>
- </tr>
- <tr id="VFS_NEWVNODE">
- <td>int (*vfs_newvnode)()</td>
- <td><a class="permalink" href="#VFS_NEWVNODE"><code class="Dv">VFS_NEWVNODE</code></a></td>
- <td>Initialize vnode with new file</td>
- </tr>
- <tr id="VFS_FHTOVP">
- <td>int (*vfs_fhtovp)()</td>
- <td><a class="permalink" href="#VFS_FHTOVP"><code class="Dv">VFS_FHTOVP</code></a></td>
- <td>NFS file handle to vnode lookup</td>
- </tr>
- <tr id="VFS_VPTOFH">
- <td>int (*vfs_vptofh)()</td>
- <td><a class="permalink" href="#VFS_VPTOFH"><code class="Dv">VFS_VPTOFH</code></a></td>
- <td>Vnode to NFS file handle lookup</td>
- </tr>
- <tr>
- <td>void (*vfs_init)()</td>
- <td>-</td>
- <td>Initialize file system</td>
- </tr>
- <tr>
- <td>void (*vfs_reinit)()</td>
- <td>-</td>
- <td>Reinitialize file system</td>
- </tr>
- <tr>
- <td>void (*vfs_done)()</td>
- <td>-</td>
- <td>Cleanup unmounted file system</td>
- </tr>
- <tr>
- <td>int (*vfs_mountroot)()</td>
- <td>-</td>
- <td>Mount the root file system</td>
- </tr>
- <tr id="VFS_SNAPSHOT">
- <td>int (*vfs_snapshot)()</td>
- <td><a class="permalink" href="#VFS_SNAPSHOT"><code class="Dv">VFS_SNAPSHOT</code></a></td>
- <td>Take a snapshot</td>
- </tr>
- <tr id="VFS_SUSPENDCTL">
- <td>int (*vfs_suspendctl)()</td>
- <td><a class="permalink" href="#VFS_SUSPENDCTL"><code class="Dv">VFS_SUSPENDCTL</code></a></td>
- <td>Suspend or resume</td>
- </tr>
-</table>
-<p class="Pp">Some additional non-function members of the vfsops structure are
- the file system name <var class="Fa">vfs_name</var> and a reference count
- <var class="Fa">vfs_refcount</var>. It is not mandatory for a file system
- type to support a particular operation, but it must assign each member
- function pointer to a suitable function 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. <var class="Fa">vfs_reinit</var>,
- <var class="Fa">vfs_mountroot</var>, <var class="Fa">vfs_fhtovp</var>, and
- <var class="Fa">vfs_vptofh</var> may be <code class="Dv">NULL</code>.</p>
-<p class="Pp">At system boot, each file system with an entry in
- <var class="Va">vfs_list_initial</var> is established and initialized. Each
- initialized file system is recorded by the kernel in the list
- <var class="Va">vfs_list</var> and the file system specific initialization
- function <var class="Fa">vfs_init</var> in its vfsops vector is invoked.
- When the file system is no longer needed <var class="Fa">vfs_done</var> is
- invoked to run file system specific cleanups and the file system is removed
- from the kernel list.</p>
-<p class="Pp">At system boot, the root file system is mounted by invoking the
- file system type specific <var class="Fa">vfs_mountroot</var> function in
- the vfsops vector. All file systems that can be mounted as a root file
- system must define this function. It is responsible for initializing to list
- of mount structures for all future mounted file systems.</p>
-<p class="Pp">Kernel state which affects a specific file system type can be
- queried and modified using the <a class="Xr">sysctl(8)</a> interface.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<dl class="Bl-tag">
- <dt id="VFS_MOUNT~2"><a class="permalink" href="#VFS_MOUNT~2"><code class="Fn">VFS_MOUNT</code></a>(<var class="Fa">mp</var>,
- <var class="Fa">path</var>, <var class="Fa">data</var>,
- <var class="Fa">dlen</var>)</dt>
- <dd>Mount a file system specified by the mount structure
- <var class="Fa">mp</var> on the mount point described by
- <var class="Fa">path</var>. The argument <var class="Fa">data</var>
- contains file system type specific data, while the argument
- <var class="Fa">dlen</var> points to a location specifying the length of
- the data.
- <p class="Pp" id="VFS_MOUNT~3"><a class="permalink" href="#VFS_MOUNT~3"><code class="Fn">VFS_MOUNT</code></a>()
- initializes the mount structure for the mounted file system. This
- structure records mount-specific information for the file system and
- records the list of vnodes associated with the file system. This
- function is invoked both to mount new file systems and to change the
- attributes of an existing file system. If the flag
- <code class="Dv">MNT_UPDATE</code> is set in
- <var class="Va">mp-&gt;mnt_flag</var>, the file system should update its
- state. This can be used, for instance, to convert a read-only file
- system to read-write. The current attributes for a mounted file system
- can be fetched by specifying <code class="Dv">MNT_GETARGS</code>. If
- neither <code class="Dv">MNT_UPDATE</code> or
- <code class="Dv">MNT_GETARGS</code> are specified, a new file system
- will attempted to be mounted.</p>
- </dd>
- <dt><code class="Fn">VFS_START</code>(<var class="Fa">mp</var>,
- <var class="Fa">flags</var>)</dt>
- <dd>Make the file system specified by the mount structure
- <var class="Fa">mp</var> operational. The argument
- <var class="Fa">flags</var> is a set of flags for controlling the
- operation of <code class="Fn">VFS_START</code>(). This function is invoked
- after <code class="Fn">VFS_MOUNT</code>() and before the first access to
- the file system.</dd>
- <dt><code class="Fn">VFS_UNMOUNT</code>(<var class="Fa">mp</var>,
- <var class="Fa">mntflags</var>)</dt>
- <dd>Unmount a file system specified by the mount structure
- <var class="Fa">mp</var>. <code class="Fn">VFS_UNMOUNT</code>() performs
- any file system type specific operations required before the file system
- is unmounted, such are flushing buffers. If
- <code class="Dv">MNT_FORCE</code> is specified in the flags
- <var class="Fa">mntflags</var> then open files are forcibly closed. The
- function also deallocates space associated with data structure that were
- allocated for the file system when it was mounted.</dd>
- <dt><code class="Fn">VFS_ROOT</code>(<var class="Fa">mp</var>,
- <var class="Fa">lktype</var>, <var class="Fa">vpp</var>)</dt>
- <dd>Get the root vnode of the file system specified by the mount structure
- <var class="Fa">mp</var>. The vnode is returned in the address given by
- <var class="Fa">vpp</var>, with lock type <var class="Fa">lktype</var>.
- <var class="Fa">lktype</var> can be <code class="Dv">LK_NONE</code>, or
- <code class="Dv">LK_SHARED</code>, or
- <code class="Dv">LK_EXCLUSIVE</code>. This function is used by the
- pathname translation algorithms when a vnode that has been covered by a
- mounted file system is encountered. While resolving the pathname, the
- pathname translation algorithm will have to go through the directory tree
- in the file system associated with that mount point and therefore requires
- the root vnode of the file system.</dd>
- <dt><code class="Fn">VFS_QUOTACTL</code>(<var class="Fa">mp</var>,
- <var class="Fa">args</var>)</dt>
- <dd>Query/modify user space quotas for the file system specified by the mount
- structure <var class="Fa">mp</var>. The argument structure provides the
- operation ID and arguments to perform. This is the same interface as
- documented in <a class="Xr">__quotactl(2)</a> except that the file system
- argument has been resolved. All <a class="Xr">copyin(9)</a> and
- <a class="Xr">copyout(9)</a> processing is handled by code above the file
- system.</dd>
- <dt><code class="Fn">VFS_STATVFS</code>(<var class="Fa">mp</var>,
- <var class="Fa">sbp</var>)</dt>
- <dd>Get file system statistics for the file system specified by the mount
- structure <var class="Fa">mp</var>. A statvfs structure filled with the
- statistics is returned in <var class="Fa">sbp</var>.
- <code class="Fn">VFS_STATVFS</code>() is the file system type specific
- implementation of the <a class="Xr">statvfs(2)</a> and
- <a class="Xr">fstatvfs(2)</a> system calls.</dd>
- <dt><code class="Fn">VFS_SYNC</code>(<var class="Fa">mp</var>,
- <var class="Fa">waitfor</var>, <var class="Fa">cred</var>)</dt>
- <dd>Flush file system I/O buffers for the file system specified by the mount
- structure <var class="Fa">mp</var>. The <var class="Fa">waitfor</var>
- argument indicates whether a partial flush or complete flush should be
- performed. The argument <var class="Fa">cred</var> specifies the calling
- credentials. <code class="Fn">VFS_SYNC</code>() does not provide any
- return value since the operation can never fail.</dd>
- <dt><code class="Fn">VFS_VGET</code>(<var class="Fa">mp</var>,
- <var class="Fa">ino</var>, <var class="Fa">lktype</var>,
- <var class="Fa">vpp</var>)</dt>
- <dd>Get vnode for a file system type specific file id
- <var class="Fa">ino</var> for the file system specified by the mount
- structure <var class="Fa">mp</var>, with lock type
- <var class="Fa">lktype</var>. <var class="Fa">lktype</var> can be
- <code class="Dv">LK_NONE</code>, or <code class="Dv">LK_SHARED</code>, or
- <code class="Dv">LK_EXCLUSIVE</code>. The vnode is returned in the address
- specified <var class="Fa">vpp</var>. The function is optional for file
- systems which have a unique id number for every file in the file system.
- It is used internally by the UFS file system and also by the NFSv3 server
- to implement the READDIRPLUS NFS call. If the file system does not support
- this function, it should return <code class="Er">EOPNOTSUPP</code>.</dd>
- <dt><code class="Fn">VFS_LOADVNODE</code>(<var class="Fa">mp</var>,
- <var class="Fa">vp</var>, <var class="Fa">key</var>,
- <var class="Fa">key_len</var>, <var class="Fa">new_key</var>)</dt>
- <dd>Initialise the vnode <var class="Fa">vp</var> with the file identified by
- the arguments <var class="Fa">key</var> and <var class="Fa">key_len</var>
- for the file system specified by the mount structure
- <var class="Fa">mp</var>.
- <p class="Pp">The new key is returned in the address specified by
- <var class="Fa">new_key</var>.</p>
- <p class="Pp">Caller of this function assures no other thread will try to
- load this file.</p>
- </dd>
- <dt id="VFS_NEWVNODE~2"><a class="permalink" href="#VFS_NEWVNODE~2"><code class="Fn">VFS_NEWVNODE</code></a>(<var class="Fa">mp</var>,
- <var class="Fa">dvp</var>, <var class="Fa">vp</var>,
- <var class="Fa">vap</var>, <var class="Fa">cred</var>,
- <var class="Fa">extra</var>, <var class="Fa">key_len</var>,
- <var class="Fa">new_key</var>)</dt>
- <dd>Initialise the vnode <var class="Fa">vp</var> with a new file for the file
- system specified by the mount structure <var class="Fa">mp</var>.
- <p class="Pp">The argument <var class="Fa">dvp</var> points to the directory
- to create the file in.</p>
- <p class="Pp">The argument <var class="Fa">vap</var> points to the
- attributes for the file to create.</p>
- <p class="Pp">The argument <var class="Fa">cred</var> holds the credentials
- for the file to create.</p>
- <p class="Pp">The argument <var class="Fa">extra</var> allows the caller to
- pass more information about the file to create.</p>
- <p class="Pp">The key for the file is returned in the addresses specified by
- <var class="Fa">key_len</var> and <var class="Fa">new_key</var>.</p>
- </dd>
- <dt id="VFS_FHTOVP~2"><a class="permalink" href="#VFS_FHTOVP~2"><code class="Fn">VFS_FHTOVP</code></a>(<var class="Fa">mp</var>,
- <var class="Fa">fhp</var>, <var class="Fa">lktype</var>,
- <var class="Fa">vpp</var>)</dt>
- <dd>Get the vnode for the file handle <var class="Fa">fhp</var> in the file
- system specified by the mount structure <var class="Fa">mp</var>, with
- lock type <var class="Fa">lktype</var>. <var class="Fa">lktype</var> can
- be <code class="Dv">LK_NONE</code>, or <code class="Dv">LK_SHARED</code>,
- or <code class="Dv">LK_EXCLUSIVE</code>. The locked vnode is returned in
- <var class="Fa">vpp</var>.
- <p class="Pp" id="VFS_FHTOVP~3">When exporting, the call to
- <a class="permalink" href="#VFS_FHTOVP~3"><code class="Fn">VFS_FHTOVP</code></a>()
- should follow a call to
- <a class="permalink" href="#netexport_check"><code class="Fn" id="netexport_check">netexport_check</code></a>(),
- which checks if the file is accessible to the client.</p>
- <p class="Pp">If file handles are not supported by the file system, this
- function must return <code class="Er">EOPNOTSUPP</code>.</p>
- </dd>
- <dt id="VFS_VPTOFH~2"><a class="permalink" href="#VFS_VPTOFH~2"><code class="Fn">VFS_VPTOFH</code></a>(<var class="Fa">vp</var>,
- <var class="Fa">fhp</var>, <var class="Fa">fh_size</var>)</dt>
- <dd>Get a file handle for the vnode specified by <var class="Fa">vp</var>. The
- file handle is returned in <var class="Fa">fhp</var>. The contents of the
- file handle are defined by the file system and are not examined by any
- other subsystems. It should contain enough information to uniquely
- identify a file within the file system as well as noticing when a file has
- been removed and the file system resources have been recycled for a new
- file.
- <p class="Pp">The parameter <var class="Fa">fh_size</var> points to the
- container size for the file handle. This parameter should be updated to
- the size of the finished file handle. Note that it is legal to call this
- function with <var class="Fa">fhp</var> set to
- <code class="Dv">NULL</code> in case <var class="Fa">fh_size</var> is
- zero. In case <var class="Fa">fh_size</var> indicates a storage space
- too small, the storage space required for the file handle corresponding
- to <var class="Fa">vp</var> should be filled in and
- <code class="Er">E2BIG</code> should be returned.</p>
- <p class="Pp">If file handles are not supported by the file system, this
- function must return <code class="Er">EOPNOTSUPP</code>.</p>
- </dd>
- <dt id="VFS_SNAPSHOT~2"><a class="permalink" href="#VFS_SNAPSHOT~2"><code class="Fn">VFS_SNAPSHOT</code></a>(<var class="Fa">mp</var>,
- <var class="Fa">vp</var>, <var class="Fa">ts</var>)</dt>
- <dd>Take a snapshot of the file system specified by the mount structure
- <var class="Fa">mp</var> and make it accessible through the locked vnode
- <var class="Fa">vp</var>. If <var class="Fa">ts</var> is not
- <code class="Dv">NULL</code> it will receive the time this snapshot was
- taken. If the file system does not support this function, it should return
- <code class="Er">EOPNOTSUPP</code>.</dd>
- <dt><code class="Fn">VFS_SUSPENDCTL</code>(<var class="Fa">mp</var>,
- <var class="Fa">cmd</var>)</dt>
- <dd>Suspend or resume all operations on this file system.
- <var class="Fa">cmd</var> is either
- <code class="Dv">SUSPEND_SUSPEND</code> to suspend or
- <code class="Dv">SUSPEND_RESUME</code> to resume operations. If the file
- system does not support this function, it should return
- <code class="Er">EOPNOTSUPP</code>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CODE_REFERENCES"><a class="permalink" href="#CODE_REFERENCES">CODE
- REFERENCES</a></h1>
-<p class="Pp">The vfs operations are implemented within the files
- <span class="Pa">sys/kern/vfs_subr.c</span> and
- <span class="Pa">sys/kern/vfs_init.c</span>.</p>
-</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">intro(9)</a>, <a class="Xr">namei(9)</a>,
- <a class="Xr">vfs(9)</a>, <a class="Xr">vfssubr(9)</a>,
- <a class="Xr">vnode(9)</a>, <a class="Xr">vnodeops(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The vfs 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">August 7, 2020</td>
- <td class="foot-os">NetBSD 10.1</td>
- </tr>
-</table>