| VFSOPS(9) | Kernel Developer's Manual | VFSOPS(9) | 
vfsops, VFS_MOUNT,
  VFS_START, VFS_UNMOUNT,
  VFS_ROOT, VFS_QUOTACTL,
  VFS_STATVFS, VFS_SYNC,
  VFS_VGET, VFS_LOADVNODE,
  VFS_NEWVNODE, VFS_FHTOVP,
  VFS_VPTOFH, VFS_SNAPSHOT,
  VFS_SUSPENDCTL —
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/vnode.h>
int
  
  VFS_MOUNT(struct mount *mp,
    const char *path, void *data,
    size_t *dlen);
int
  
  VFS_START(struct
    mount *mp, int
    flags);
int
  
  VFS_UNMOUNT(struct
    mount *mp, int
    mntflags);
int
  
  VFS_ROOT(struct
    mount *mp, int
    lktype, struct vnode
    **vpp);
int
  
  VFS_QUOTACTL(struct
    mount *mp, struct
    quotactl_args *args);
int
  
  VFS_STATVFS(struct
    mount *mp, struct statvfs
    *sbp);
int
  
  VFS_SYNC(struct
    mount *mp, int
    waitfor, kauth_cred_t
    cred);
int
  
  VFS_VGET(struct
    mount *mp, ino_t
    ino, int lktype,
    struct vnode **vpp);
int
  
  VFS_LOADVNODE(struct
    mount *mp, struct vnode
    *vp, const void
    *key, size_t
    key_len, const void
    **new_key);
int
  
  VFS_NEWVNODE(struct
    mount *mp, struct vnode
    *dvp, struct vnode
    *vp, struct vattr
    *vap, kauth_cred_t
    cred, void *extra,
    size_t *key_len,
    const void
  **new_key);
int
  
  VFS_FHTOVP(struct
    mount *mp, struct fid
    *fhp, int lktype,
    struct vnode **vpp);
int
  
  VFS_VPTOFH(struct
    vnode *vp, struct fid
    *fhp, size_t
    *fh_size);
int
  
  VFS_SNAPSHOT(struct
    mount *mp, struct vnode
    *vp, struct timespec
    *ts);
int
  
  VFS_SUSPENDCTL(struct
    mount *mp, int
    cmd);
All supported file systems in the kernel have an entry in the
    vfs_list_initial table. This table is generated by
    config(1) and is a
    NULL-terminated list of
    vfsops 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.
| Vector element | Macro | Description | 
| int (*vfs_mount)() | VFS_MOUNT | Mount a file system | 
| int (*vfs_start)() | VFS_START | Make operational | 
| int (*vfs_unmount)() | VFS_UNMOUNT | Unmount a file system | 
| int (*vfs_root)() | VFS_ROOT | Get the file system root vnode | 
| int (*vfs_quotactl)() | VFS_QUOTACTL | Query/modify space quotas | 
| int (*vfs_statvfs)() | VFS_STATVFS | Get file system statistics | 
| int (*vfs_sync)() | VFS_SYNC | Flush file system buffers | 
| int (*vfs_vget)() | VFS_VGET | Get vnode from file id | 
| int (*vfs_loadvnode)() | VFS_LOADVNODE | Initialize vnode with file | 
| int (*vfs_newvnode)() | VFS_NEWVNODE | Initialize vnode with new file | 
| int (*vfs_fhtovp)() | VFS_FHTOVP | NFS file handle to vnode lookup | 
| int (*vfs_vptofh)() | VFS_VPTOFH | Vnode to NFS file handle lookup | 
| void (*vfs_init)() | - | Initialize file system | 
| void (*vfs_reinit)() | - | Reinitialize file system | 
| void (*vfs_done)() | - | Cleanup unmounted file system | 
| int (*vfs_mountroot)() | - | Mount the root file system | 
| int (*vfs_snapshot)() | VFS_SNAPSHOT | Take a snapshot | 
| int (*vfs_suspendctl)() | VFS_SUSPENDCTL | Suspend or resume | 
Some additional non-function members of the vfsops structure are
    the file system name vfs_name and a reference count
    vfs_refcount. 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. vfs_reinit,
    vfs_mountroot, vfs_fhtovp, and
    vfs_vptofh may be NULL.
At system boot, each file system with an entry in vfs_list_initial is established and initialized. Each initialized file system is recorded by the kernel in the list vfs_list and the file system specific initialization function vfs_init in its vfsops vector is invoked. When the file system is no longer needed vfs_done is invoked to run file system specific cleanups and the file system is removed from the kernel list.
At system boot, the root file system is mounted by invoking the file system type specific vfs_mountroot 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.
Kernel state which affects a specific file system type can be queried and modified using the sysctl(8) interface.
VFS_MOUNT(mp,
    path, data,
    dlen)VFS_MOUNT() 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 MNT_UPDATE is set in
        mp->mnt_flag, 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 MNT_GETARGS. If
        neither MNT_UPDATE or
        MNT_GETARGS are specified, a new file system
        will attempted to be mounted.
VFS_START(mp,
    flags)VFS_START(). This function is invoked
      after VFS_MOUNT() and before the first access to
      the file system.VFS_UNMOUNT(mp,
    mntflags)VFS_UNMOUNT() performs
      any file system type specific operations required before the file system
      is unmounted, such are flushing buffers. If
      MNT_FORCE is specified in the flags
      mntflags 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.VFS_ROOT(mp,
    lktype, vpp)LK_NONE, or
      LK_SHARED, or
      LK_EXCLUSIVE. 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.VFS_QUOTACTL(mp,
    args)VFS_STATVFS(mp,
    sbp)VFS_STATVFS() is the file system type specific
      implementation of the
      statvfs(2) and
      fstatvfs(2) system
    calls.VFS_SYNC(mp,
    waitfor, cred)VFS_SYNC() does not provide any
      return value since the operation can never fail.VFS_VGET(mp,
    ino, lktype,
    vpp)LK_NONE, or LK_SHARED, or
      LK_EXCLUSIVE. The vnode is returned in the address
      specified vpp. 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 EOPNOTSUPP.VFS_LOADVNODE(mp,
    vp, key,
    key_len, new_key)The new key is returned in the address specified by new_key.
Caller of this function assures no other thread will try to load this file.
VFS_NEWVNODE(mp,
    dvp, vp,
    vap, cred,
    extra, key_len,
    new_key)The argument dvp points to the directory to create the file in.
The argument vap points to the attributes for the file to create.
The argument cred holds the credentials for the file to create.
The argument extra allows the caller to pass more information about the file to create.
The key for the file is returned in the addresses specified by key_len and new_key.
VFS_FHTOVP(mp,
    fhp, lktype,
    vpp)LK_NONE, or LK_SHARED,
      or LK_EXCLUSIVE. The locked vnode is returned in
      vpp.
    When exporting, the call to
        VFS_FHTOVP() should follow a call to
        netexport_check(), which checks if the file is
        accessible to the client.
If file handles are not supported by the file system, this
        function must return EOPNOTSUPP.
VFS_VPTOFH(vp,
    fhp, fh_size)The parameter fh_size 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 fhp set to
        NULL in case fh_size is
        zero. In case fh_size indicates a storage space
        too small, the storage space required for the file handle corresponding
        to vp should be filled in and
        E2BIG should be returned.
If file handles are not supported by the file system, this
        function must return EOPNOTSUPP.
VFS_SNAPSHOT(mp,
    vp, ts)NULL it will receive the time this snapshot was
      taken. If the file system does not support this function, it should return
      EOPNOTSUPP.VFS_SUSPENDCTL(mp,
    cmd)SUSPEND_SUSPEND to suspend or
      SUSPEND_RESUME to resume operations. If the file
      system does not support this function, it should return
      EOPNOTSUPP.| August 7, 2020 | NetBSD 10.0 |