Document kernel API for vfs_busy(), vfs_mount(), vfs_unbusy(), and

vinvalbuf().

Submitted by: Chad David <davidc@acns.ab.ca>
This commit is contained in:
Alfred Perlstein
2001-07-09 06:47:10 +00:00
parent fbd7787b32
commit 8981fef84c
4 changed files with 364 additions and 0 deletions
+80
View File
@@ -0,0 +1,80 @@
.\"
.\" Copyright (C) 2001 Chad David <davidc@acns.ab.ca>. All rights reserved.
.\"
.\" 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(s), this list of conditions and the following disclaimer as
.\" the first lines of this file unmodified other than the possible
.\" addition of one or more copyright notices.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice(s), 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 COPYRIGHT HOLDER(S) ``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 COPYRIGHT HOLDER(S) 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.
.\"
.\" $FreeBSD$
.\"
.Dd July 8, 2001
.Dt VFS_BUSY 9
.Os
.Sh NAME
.Nm vfs_busy
.Nd "Marks a mount point as busy."
.Sh SYNOPSIS
.Ft int
.Fo vfs_busy
.Fa "struct mount *mp"
.Fa "int flags"
.Fa "struct mtx *interlkp"
.Fa "struct proc *p"
.Fc
.Sh DESCRIPTION
The
.Nm
function marks a mount point as busy. The purpose of this
function is to synchronize access to a mount point. It also
delays unmounting by sleeping on mp if the MNTK_UNMOUNT flag
is set in mp->mnt_kern_flag and the LK_NOWAIT flag is NOT set.
.Pp
Its arguments are:
.Bl -tag -width interlkp
.It Ar mp
The mount point to busy.
.It Ar flags
Flags controlling the operation of
.Nm
.
.Pp
LK_NOWAIT - do not sleep if MNTK_UNMOUNT is set.
.It Ar interlkp
The interlock mutex for mp->mount_lock. If there is any chance
the mount point is being unmounted and LK_NOWAIT is not set then
interlock must be valid locked mutex.
.It Ar p
The process responsible for this call.
.El
.Sh LOCKS
If interlkp is a valid pointer it must be locked on entry,
and it will not be unlocked even on error.
.Sh RETURN VALUES
A 0 value is returned on success. If the mount point is being
unmounted ENOENT will always be returned.
.Sh ERRORS
.Bl -tag
.It Bq ENOENT
The mount point is being unmounted (MNTK_UNMOUNT is set).
.El
.Sh AUTHORS
This man page was written by Chad David.
+116
View File
@@ -0,0 +1,116 @@
.\"
.\" Copyright (C) 2001 Chad David <davidc@acns.ab.ca>. All rights reserved.
.\"
.\" 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(s), this list of conditions and the following disclaimer as
.\" the first lines of this file unmodified other than the possible
.\" addition of one or more copyright notices.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice(s), 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 COPYRIGHT HOLDER(S) ``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 COPYRIGHT HOLDER(S) 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.
.\"
.\" $FreeBSD$
.\"
.Dd July 8, 2001
.Dt VFS_MOUNT 9
.Os
.Sh NAME
.Nm vfs_mount
.Nd "Generic filesystem mount function"
.Sh SYNOPSIS
.Fd #include <sys/mount.h>
.Ft int
.Fo vfs_mount
.Fa "struct proc *vp"
.Fa "char *fstype"
.Fa "char *fspath"
.Fa "int fsflags"
.Fa "void *fsdata"
.Fc
.Sh DESCRIPTION
The
.Nm
function handles the generic portion of mounting a filesystem,
and calls the filesystem specific mount function after verifying
its parameters and setting up the structures expected by the
underlying mount code.
.Pp
.Nm
is called directly by the mount system call.
.Pp
Its arguments are:
.Bl -tag -width fsflags
.It Ar p
The process responsible for this call.
.It Ar fstype
The type of filesystem being mounted.
.It Ar fspath
The path to the mount point of the filesystem.
.It Ar fsflags
Flags controlling the mount. See mount(8) for details.
.Pp
MNT_EXPORTED MNT_NOSUID MNT_NODEV MNT_UPDATE MNT_RELOAD
MNT_FORCE MNT_ASYNC MNT_SYNCHRONOUS MNT_UNION MNT_NOATIME
MNT_SNAPSHOT MNT_NOCLUSTERR MNT_NOCLUSTERW MNT_IGNORE
MNT_UNION MNT_NOSYMFOLLOW
.It Ar fsdata
Filesystem specific data structure. It is in userspace
when passed to
.Nm
and is left untouched when passed to filesystems mount().
.El
.Sh RETURN VALUES
A 0 value is returned on success.
.Sh ERRORS
.Bl -tag -width Er
.It Bq Er ENAMETOOLONG
The fs type or the mount point path is too long or any individual
path component is too long.
.It Bq Er EPERM
Permission denied. There are a number of reason this can occur
ranging from the user not having permission to mount a filesystem
to the securelevel being to high to load the fstype module.
.It Bq Er EINVAL
Invalid operation (ex: trying to update a non mount-point).
.It Bq Er ENOENT
The mount point does not exist (from namei)
.It Bq Er ELOOP
The mount point is a muddle of links (from namei)
.It Bq Er EOPNOTSUPP
The operation is not supported (ex: reloading a r/w filesystem)
.It Bq Er EBUSY
The mount point is busy or is not really a mount point (on update)
.It Bq Er ENOTDIR
The mount point is not a directory
.It Bq Er ENODEV
The kernel linker was unable to load the specified fstype or
was unable to find the specified fstype module.
.Pp
Other errors can be returned by the filesystems mount() and
you should check the specific filesystem for details. Also
this call relies on a large number of other kernel services
whose errors it returns so this list my not be exhaustive.
.El
.Sh SEE ALSO
.Xr mount 2
.Xr mount 8
.Xr mount 9
.Xr ffs_mount 9
vfs.usermount
.Sh AUTHORS
This man page was written by Chad David.
+64
View File
@@ -0,0 +1,64 @@
.\"
.\" Copyright (C) 2001 Chad David <davidc@acns.ab.ca>. All rights reserved.
.\"
.\" 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(s), this list of conditions and the following disclaimer as
.\" the first lines of this file unmodified other than the possible
.\" addition of one or more copyright notices.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice(s), 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 COPYRIGHT HOLDER(S) ``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 COPYRIGHT HOLDER(S) 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.
.\"
.\" $FreeBSD$
.\"
.Dd July 8, 2001
.Dt VFS_UNBUSY 9
.Os
.Sh NAME
.Nm vfs_unbusy
.Nd "Unbusy a mount point.
.Sh SYNOPSIS
.Ft void
.Fo vfs_unbusy
.Fa "struct mount *mp"
.Fa "struct proc *p"
.Fc
.Sh DESCRIPTION
The
.Nm
function unbusys (unlocks) a mount point by unlocking
mp->mnt_lock. The lock is typically aquired by calling
vfs_busy() prior to this call.
.Pp
Its arguments are:
.Bl -tag -width uap
.It Ar mp
The mount point to unbusy (unlock).
.It Ar p
The process responsible for this call.
.El
.Sh LOCKS
.Ar mnt_lock
must be locked in
.Ar mp
prior to calling
this function, and it will be unlocked upon return.
.Sh SEE ALSO
.Xr vfs_busy 9
.Sh AUTHORS
This man page was written by Chad David.
+104
View File
@@ -0,0 +1,104 @@
.\"
.\" Copyright (C) 2001 Chad David <davidc@acns.ab.ca>. All rights reserved.
.\"
.\" 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(s), this list of conditions and the following disclaimer as
.\" the first lines of this file unmodified other than the possible
.\" addition of one or more copyright notices.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice(s), 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 COPYRIGHT HOLDER(S) ``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 COPYRIGHT HOLDER(S) 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.
.\"
.\" $FreeBSD$
.\"
.Dd July 7, 2001
.Dt VINVALBUF 9
.Os
.Sh NAME
.Nm vinvalbuf
.Nd "Flushes and invalidates all buffers associated with a vnode"
.Sh SYNOPSIS
.Fd #include <sys/vnode.h>
.Ft int
.Fo vinvalbuf
.Fa "struct vnode *vp"
.Fa "int flags"
.Fa "struct ucred *cred"
.Fa "struct proc *p"
.Fa "int slpflag"
.Fa "int slptimeo"
.Fc
.Sh DESCRIPTION
The
.Nm
function invalidates all of the buffers associated with the given vnode.
This includes buffers on the clean list and the dirty list. If the V_SAVE
flag is specified then the buffers on the dirty list are synced prior to being
released. If there is a VM Object associated with the vnode it is removed.
.Pp
Its arguments are:
.Bl -tag -width spltimeo
.It Ar vp
A pointer to the vnode whose buffers will be invalidated.
.It Ar flags
The only supported flag is V_SAVE and it indicates that dirty buffers should by synced.
.It Ar cred
The user credentials that are used to
.Fn VOP_FSYNC ""
buffers if V_SAVE is set.
.It Ar p
The process responsible for this call.
.It Ar slpflag
The slp flag that will be used in the priority of any sleeps in the function.
.It Ar slptimeo
The timeout for any sleeps in the function.
.El
.Sh LOCKS
The vnode is assumed to be locked prior to the call and remains locked upon return.
.Pp
Giant must be held by prior to the call and remains locked upon return.
.Sh RETURN VALUES
A 0 value is returned on success.
.Sh PSEUDOCODE
.Bd -literal
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, p);
error = vinvalbuf(devvp, V_SAVE, cred, p, 0, 0);
VOP_UNLOCK(devvp, 0, p);
if (error)
return (error);
.Ed
.Sh ERRORS
.Bl -tag -width Er
.It Bq Er ENOSPC
The filesystem is full. (With V_SAVE)
.It Bq Er EDQUOT
Disc quota exceeded. (With V_SAVE)
.It Bq Er EWOULDBLOCK
Sleep operation timed out (See slptimeo)
.It Bq Er ERESTART
A signal needs to be delivered and the system call should be restarted (With PCATCH set in slpflag)
.It Bq Er EINTR
The system has been interrupted by a signal (With PCATCH set in slpflag)
.El
.Sh SEE ALSO
.Xr brelse 9
.Xr bremfree 9
.Xr VOP_FSYNC 9
.Xr tsleep 9
.Sh AUTHORS
This man page was written by Chad David.