279 lines
8.0 KiB
Groff
279 lines
8.0 KiB
Groff
.\" $NetBSD: vfssubr.9,v 1.25 2014/05/24 17:14:02 wiz Exp $
|
|
.\"
|
|
.\" Copyright (c) 2003, 2005, 2006 The NetBSD Foundation, Inc.
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" This code is derived from software contributed to The NetBSD Foundation
|
|
.\" by Gregory McGarry.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
|
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
|
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
.\" POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.Dd May 24, 2014
|
|
.Dt VFSSUBR 9
|
|
.Os
|
|
.Sh NAME
|
|
.Nm vfssubr ,
|
|
.Nm vfs_getnewfsid ,
|
|
.Nm vfs_getvfs ,
|
|
.Nm vfs_export ,
|
|
.Nm vfs_showexport ,
|
|
.Nm vfs_export_lookup ,
|
|
.Nm vfs_setpublicfs ,
|
|
.Nm vfs_mountedon ,
|
|
.Nm vfs_mountroot ,
|
|
.Nm vfs_unmountall ,
|
|
.Nm vfs_busy ,
|
|
.Nm vfs_unbusy ,
|
|
.Nm vfs_mountalloc ,
|
|
.Nm vfs_rootmountalloc ,
|
|
.Nm vfs_shutdown ,
|
|
.Nm vfs_attach ,
|
|
.Nm vfs_detach ,
|
|
.Nm vfs_reinit ,
|
|
.Nm vfs_getopsbyname ,
|
|
.Nm vfs_suspend ,
|
|
.Nm vfs_resume ,
|
|
.Nm vfs_vnode_iterator_init ,
|
|
.Nm vfs_vnode_iterator_destroy ,
|
|
.Nm vfs_vnode_iterator_next
|
|
.Nd high-level interface to kernel file system interface
|
|
.Sh SYNOPSIS
|
|
.In sys/param.h
|
|
.In sys/mount.h
|
|
.In sys/vnode.h
|
|
.Ft void
|
|
.Fn vfs_getnewfsid "struct mount *mp"
|
|
.Ft struct mount *
|
|
.Fn vfs_getvfs "fsid_t *fsid"
|
|
.Ft int
|
|
.Fn vfs_export_lookup "struct mount *mp" "struct netexport *nep" \
|
|
"struct export_args *argp"
|
|
.Ft int
|
|
.Fn vfs_setpublicfs "struct mount *mp" "struct netexport *nep" \
|
|
"struct export_args *argp"
|
|
.Ft int
|
|
.Fn vfs_mountedon "struct vnode *vp"
|
|
.Ft int
|
|
.Fn vfs_mountroot "void"
|
|
.Ft void
|
|
.Fn vfs_unmountall "struct lwp *l"
|
|
.Ft int
|
|
.Fn vfs_busy "struct mount *mp" "struct mount **nextp"
|
|
.Ft void
|
|
.Fn vfs_unbusy "struct mount *mp" "bool keepref" "struct mount **nextp"
|
|
.Ft struct mount *
|
|
.Fn vfs_mountalloc "struct vfsops *vfs" "struct vnode *vp"
|
|
.Ft int
|
|
.Fn vfs_rootmountalloc "char *fstypename" "char *devname" \
|
|
"struct mount **mpp"
|
|
.Ft void
|
|
.Fn vfs_shutdown "void"
|
|
.Ft int
|
|
.Fn vfs_attach "struct vfsops *vfs"
|
|
.Ft int
|
|
.Fn vfs_detach "struct vfsops *vfs"
|
|
.Ft void
|
|
.Fn vfs_reinit "void"
|
|
.Ft struct vfsops *
|
|
.Fn vfs_getopsbyname "const char *name"
|
|
.Ft int
|
|
.Fn vfs_suspend "struct mount *mp" "int nowait"
|
|
.Ft void
|
|
.Fn vfs_resume "struct mount *mp"
|
|
.Ft void
|
|
.Fn vfs_vnode_iterator_init "struct mount *mp" "struct vnode_iterator **vip"
|
|
.Ft void
|
|
.Fn vfs_vnode_iterator_destroy "struct vnode_iterator *vi"
|
|
.Ft struct vnode *
|
|
.Fn vfs_vnode_iterator_next "struct vnode_iterator *vi" "bool (*selector)(void *context, struct vnode *vpp)" "void *context"
|
|
.Sh DESCRIPTION
|
|
The high-level functions described in this page are the interface to
|
|
the kernel file system interface (VFS).
|
|
.Sh FUNCTIONS
|
|
.Bl -tag -width compact
|
|
.It Fn vfs_getnewfsid "mp"
|
|
Get a new unique file system id type for the file system specified by
|
|
the mount structure
|
|
.Fa mp .
|
|
The file system id type is stored in
|
|
.Em mp-\*[Gt]mnt_stat.f_fsidx .
|
|
.It Fn vfs_getvfs "fsid"
|
|
Lookup a mount point with the file system identifier
|
|
.Fa fsid .
|
|
.It Fn vfs_export_lookup "mp" "nep" "argp"
|
|
Check client permission on the exportable file system specified by the
|
|
mount structure
|
|
.Fa mp .
|
|
The argument
|
|
.Fa nam
|
|
is the address of the networked client.
|
|
This function is used by file system type specific functions to verify
|
|
that the client can access the file system.
|
|
.It Fn vfs_setpublicfs "mp" "nep" "argp"
|
|
Set the publicly exported file system specified by the mount structure
|
|
.Fa mp .
|
|
.It Fn vfs_mountedon "vp"
|
|
Check to see if a file system is mounted on a block device specified
|
|
by the vnode
|
|
.Fa vp .
|
|
.It Fn vfs_mountroot "void"
|
|
Mount the root file system.
|
|
.It Fn vfs_unmountall "l"
|
|
Unmount all file systems.
|
|
.It Fn vfs_busy "mp" "nextp"
|
|
Mark the mount point specified by
|
|
.Fa mp
|
|
as busy and get a reference to it.
|
|
This function is used to synchronize access and to delay unmounting.
|
|
The caller must hold a pre-existing reference to the mount.
|
|
If
|
|
.Fa nextp
|
|
is not
|
|
.Dv NULL ,
|
|
the caller must hold the
|
|
.Em mountlist_lock
|
|
and
|
|
.Fa nextp
|
|
will receive the next mount from mount list on error.
|
|
The
|
|
.Em mountlist_lock
|
|
is released on return.
|
|
.It Fn vfs_unbusy "mp" "keepref" "nextp"
|
|
Undo a
|
|
.Fn vfs_busy
|
|
on the mount point specified by
|
|
.Fa mp .
|
|
If
|
|
.Fa keepref
|
|
is true, preserve the reference added by
|
|
.Fn vfs_busy .
|
|
If
|
|
.Fa nextp
|
|
is not
|
|
.Dv NULL ,
|
|
the
|
|
.Em mountlist_lock
|
|
will be aquired and
|
|
.Fa nextp
|
|
will receive the next mount from mount list.
|
|
.It Fn vfs_mountalloc "vfsops" "vp"
|
|
Allocate and initialise a mount structure, setting
|
|
.Em mnt_vnodecovered
|
|
to
|
|
.Fa vp
|
|
and
|
|
.Em mnt_op
|
|
to
|
|
.Fa vfsops .
|
|
On success, mark the mount structure as busy and return its address.
|
|
Otherwise, return
|
|
.Dv NULL .
|
|
.It Fn vfs_rootmountalloc "fstypename" "devname" "mpp"
|
|
Lookup a file system type specified by the name
|
|
.Fa fstypename
|
|
and if found allocate and initialise a mount structure for it.
|
|
The allocated mount structure is returned in the address specified by
|
|
.Fa mpp .
|
|
The device the root file system was mounted from is specified by the
|
|
argument
|
|
.Fa devname
|
|
and is recorded in the new mount structure.
|
|
.It Fn vfs_shutdown
|
|
Sync and unmount all file systems before shutting down.
|
|
Invoked by
|
|
.Xr cpu_reboot 9 .
|
|
.It Fn vfs_attach "vfs"
|
|
Establish file system
|
|
.Fa vfs
|
|
and initialise it.
|
|
.It Fn vfs_detach "vfs"
|
|
Remove file system
|
|
.Fa vfs
|
|
from the kernel.
|
|
.It Fn vfs_reinit "void"
|
|
Reinitialises all file systems within the kernel through file
|
|
system-specific vfs operation (see
|
|
.Xr vfsops 9 ) .
|
|
.It Fn vfs_getopsbyname "name"
|
|
Given a file system name specified by
|
|
.Fa name ,
|
|
look up the vfs operations for that file system (see
|
|
.Xr vfsops 9 ) ,
|
|
or return
|
|
.Dv NULL
|
|
if file system isn't present in the kernel.
|
|
.It Fn vfs_suspend "mp" "nowait"
|
|
Request a mounted file system to suspend all operations.
|
|
All new operations to the file system are stopped.
|
|
After all operations in progress have completed, the
|
|
file system is synced to disk and the function returns.
|
|
If a file system suspension is currently in progress and
|
|
.Fa nowait
|
|
is set
|
|
.Er EWOULDBLOCK
|
|
is returned.
|
|
If the operation is successful, zero is returned, otherwise an
|
|
appropriate error code is returned.
|
|
.It Fn vfs_resume "mp"
|
|
Request a mounted file system to resume operations.
|
|
.It Fn vfs_vnode_iterator_init "mp" "vip"
|
|
Allocate and initialize an iterator
|
|
.Fa vip
|
|
over all vnodes attached to mount point
|
|
.Fa mp .
|
|
.It Fn vfs_vnode_iterator_destroy "vi"
|
|
Free all resources associated with an iterator
|
|
.Fa vi .
|
|
.It Fn vfs_vnode_iterator_next "vi" "selector" "context"
|
|
Return the next vnode from iterator
|
|
.Fa vi .
|
|
If the operation is successful the vnode has a reference added to it
|
|
and it is returned.
|
|
If the iterator is exhausted the function returns
|
|
.Dv NULL .
|
|
If an optional
|
|
.Fa selector
|
|
function is provided, then this function is called with the
|
|
.Fa context
|
|
provided and the candidate vnode to be returned.
|
|
If the
|
|
.Fa selector
|
|
returns
|
|
.Dv false ,
|
|
then the vnode is skipped; if it returns
|
|
.Dv true ,
|
|
the vnode is referenced and then returned.
|
|
.El
|
|
.Sh CODE REFERENCES
|
|
The vfs interface functions are implemented within the files
|
|
.Pa sys/kern/vfs_mount.c ,
|
|
.Pa sys/kern/vfs_subr.c
|
|
and
|
|
.Pa sys/kern/vfs_init.c .
|
|
.Sh SEE ALSO
|
|
.Xr intro 9 ,
|
|
.Xr namei 9 ,
|
|
.Xr vfs 9 ,
|
|
.Xr vfsops 9 ,
|
|
.Xr vnode 9 ,
|
|
.Xr vnodeops 9
|