8bd7cb6a69
* There is no -indent option to .Bd or .Bl, although you would never know that from its frequent use in this tree. There is a "-offset indent" combination that makes sense, and you can certainly say "-width indent". * Also, you can't markup the -width option argument, tho you CAN use a callable macro. So "-width Ar filename" doesn't make sense, but either "-width Ar" or "-width filename" does, as might something like "-width xxfilename" for a little extra space. * There are a lot of needlessly complex hanging tag macros in man4 used to create simple item lists. Those should be simplified one of these days before someone copies and edits yet another man4 page.
1339 lines
42 KiB
Groff
1339 lines
42 KiB
Groff
.\" $NetBSD: vnodeops.9,v 1.8 2002/02/07 03:15:10 ross Exp $
|
|
.\"
|
|
.\" Copyright (c) 2001 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.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the NetBSD
|
|
.\" Foundation, Inc. and its contributors.
|
|
.\" 4. Neither the name of The NetBSD Foundation nor the names of its
|
|
.\" contributors may be used to endorse or promote products derived
|
|
.\" from this software without specific prior written permission.
|
|
.\"
|
|
.\" 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 October 16, 2001
|
|
.Dt VNODEOPS 9
|
|
.Os
|
|
.Sh NAME
|
|
.Nm vnodeops ,
|
|
.Nm VOP_LOOKUP ,
|
|
.Nm VOP_CREATE ,
|
|
.Nm VOP_MKNOD ,
|
|
.Nm VOP_OPEN ,
|
|
.Nm VOP_CLOSE ,
|
|
.Nm VOP_ACCESS ,
|
|
.Nm VOP_GETATTR ,
|
|
.Nm VOP_SETATTR ,
|
|
.Nm VOP_READ ,
|
|
.Nm VOP_WRITE ,
|
|
.Nm VOP_IOCTL ,
|
|
.Nm VOP_FCNTL ,
|
|
.Nm VOP_POLL ,
|
|
.Nm VOP_REVOKE ,
|
|
.Nm VOP_MMAP ,
|
|
.Nm VOP_FSYNC ,
|
|
.Nm VOP_SEEK ,
|
|
.Nm VOP_REMOVE ,
|
|
.Nm VOP_LINK ,
|
|
.Nm VOP_RENAME ,
|
|
.Nm VOP_MKDIR ,
|
|
.Nm VOP_RMDIR ,
|
|
.Nm VOP_SYMLINK ,
|
|
.Nm VOP_READDIR ,
|
|
.Nm VOP_READLINK ,
|
|
.Nm VOP_ABORTOP ,
|
|
.Nm VOP_INACTIVE ,
|
|
.Nm VOP_RECLAIM ,
|
|
.Nm VOP_LOCK ,
|
|
.Nm VOP_UNLOCK ,
|
|
.Nm VOP_ISLOCKED ,
|
|
.Nm VOP_BMAP ,
|
|
.Nm VOP_PRINT ,
|
|
.Nm VOP_PATHCONF ,
|
|
.Nm VOP_ADVLOCK ,
|
|
.Nm VOP_BLKATOFF ,
|
|
.Nm VOP_VALLOC ,
|
|
.Nm VOP_BALLOC ,
|
|
.Nm VOP_REALLOCBLKS ,
|
|
.Nm VOP_VFREE ,
|
|
.Nm VOP_TRUNCATE ,
|
|
.Nm VOP_UPDATE ,
|
|
.Nm VOP_LEASE ,
|
|
.Nm VOP_WHITEOUT ,
|
|
.Nm VOP_GETPAGES ,
|
|
.Nm VOP_PUTPAGES ,
|
|
.Nm VOP_STRATEGY ,
|
|
.Nm VOP_BWRITE
|
|
.Nd vnode operations
|
|
.Sh SYNOPSIS
|
|
.Fd #include <sys/param.h>
|
|
.Fd #include <sys/buf.h>
|
|
.Fd #include <sys/dirent.h>
|
|
.Fd #include <sys/lock.h>
|
|
.Fd #include <sys/vnode.h>
|
|
.Fd #include <sys/mount.h>
|
|
.Fd #include <sys/namei.h>
|
|
.Fd #include <sys/unistd.h>
|
|
.Fd #include <sys/fcntl.h>
|
|
.Fd #include <sys/lockf.h>
|
|
.Ft int
|
|
.Fn VOP_LOOKUP "struct vnode *dvp" "struct vnode **vpp" \
|
|
"struct componentname *cnp"
|
|
.Ft int
|
|
.Fn VOP_CREATE "struct vnode *dvp" "struct vnode **vpp" \
|
|
"struct componentname *cnp" "struct vattr *vap"
|
|
.Ft int
|
|
.Fn VOP_MKNOD "struct vnode *dvp" "struct vnode **vpp" \
|
|
"struct componentname *cnp" "struct vattr *vap"
|
|
.Ft int
|
|
.Fn VOP_OPEN "struct vnode *vp" "int mode" "struct ucred *cred" \
|
|
"struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_CLOSE "struct vnode *vp" "int fflag" "struct ucred *cred" \
|
|
"struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_ACCESS "struct vnode *vp" "int mode" "struct ucred *cred" \
|
|
"struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_GETATTR "struct vnode *vp" "struct vattr *vap" \
|
|
"struct ucred *cred" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_SETATTR "struct vnode *vp" "struct vattr *vap" \
|
|
"struct ucred *cred" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_READ "struct vnode *vp" "struct uio *uio" "int ioflag" \
|
|
"struct ucred *cred"
|
|
.Ft int
|
|
.Fn VOP_WRITE "struct vnode *vp" "struct uio *uio" "int ioflag" \
|
|
"struct ucred *cred"
|
|
.Ft int
|
|
.Fn VOP_IOCTL "struct vnode *vp" "u_long command" "caddr_t data" \
|
|
"int fflag" "struct ucred *cred" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_FCNTL "struct vnode *vp" "u_int command" "caddr_t data" \
|
|
"int fflag" "struct ucred *cred" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_POLL "struct vnode *vp" "int events" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_REVOKE "struct vnode *vp" "int flags"
|
|
.Ft int
|
|
.Fn VOP_MMAP "struct vnode *vp" "int fflags" \
|
|
"struct ucred *cred" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_FSYNC "struct vnode *vp" "struct ucred *cred" "int flags" \
|
|
"off_t offlo" "off_t offhi" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_SEEK "struct vnode *vp" "off_t oldoff" "off_t newoff" \
|
|
"struct ucred *cred"
|
|
.Ft int
|
|
.Fn VOP_REMOVE "struct vnode *vp" "struct vnode *vp" \
|
|
"struct componentname *cnp"
|
|
.Ft int
|
|
.Fn VOP_LINK "struct vnode *dvp" "struct vnode *vp" \
|
|
"struct componentname *cnp"
|
|
.Ft int
|
|
.Fn VOP_RENAME "struct vnode *fdvp" "struct vnode *vp" \
|
|
"struct componentname *fcnp" "struct componentname *tdvp" \
|
|
"struct vnode *tvp" "struct componentname *tcnp"
|
|
.Ft int
|
|
.Fn VOP_MKDIR "struct vnode *vp" "struct vnode **vpp" \
|
|
"struct componentname *cnp" "struct vattr *vap"
|
|
.Ft int
|
|
.Fn VOP_RMDIR "struct vnode *vp" "struct vnode *vp" \
|
|
"struct componentname *cnp"
|
|
.Ft int
|
|
.Fn VOP_SYMLINK "struct vnode *dvp" "struct vnode **vpp" \
|
|
"struct componentname *cnp" "struct vattr *vap" "char *target"
|
|
.Ft int
|
|
.Fn VOP_READDIR "struct vnode *vp" "struct uio *uio" \
|
|
"struct ucred *cred" "int *eofflag" "cookies" "ncookies"
|
|
.Ft int
|
|
.Fn VOP_READLINK "struct vnode *vp" "struct uio *uio" "struct ucred *cred"
|
|
.Ft int
|
|
.Fn VOP_ABORTOP "struct vnode *dvp" "struct componentname *cnp"
|
|
.Ft int
|
|
.Fn VOP_INACTIVE "struct vnode *vp" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_RECLAIM "struct vnode *vp" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_LOCK "struct vnode *vp" "int flags"
|
|
.Ft int
|
|
.Fn VOP_UNLOCK "struct vnode *vp" "int flags"
|
|
.Ft int
|
|
.Fn VOP_ISLOCKED "struct vnode *vp"
|
|
.Ft int
|
|
.Fn VOP_BMAP "struct vnode *vp" "daddr_t bn" "struct vnode **vpp" \
|
|
"daddr_t *bnp" "int *runp"
|
|
.Ft int
|
|
.Fn VOP_PRINT "struct vnode *vp"
|
|
.Ft int
|
|
.Fn VOP_PATHCONF "struct vnode *vp" "int name" "register_t *retval"
|
|
.Ft int
|
|
.Fn VOP_ADVLOCK "struct vnode *vp" "caddr_t id" "int op" \
|
|
"struct flock *fl" "int flags"
|
|
.Ft int
|
|
.Fn VOP_BLKATOFF "struct vnode *vp" "off_t offset" "char **res" \
|
|
"struct buf **bpp"
|
|
.Ft int
|
|
.Fn VOP_VALLOC "struct vnode *pvp" "int mode" "struct ucred *cred" \
|
|
"struct vnode **vpp"
|
|
.Ft int
|
|
.Fn VOP_BALLOC "struct vnode *vp" "off_t startoffset" "int size" \
|
|
"struct ucred *cred" "int flags" "struct buf **bpp"
|
|
.Ft int
|
|
.Fn VOP_REALLOCBLKS "struct vnode *vp" "struct cluster_save *buflist"
|
|
.Ft int
|
|
.Fn VOP_VFREE "struct vnode *pvp" "ino_t ino" "int mode"
|
|
.Ft int
|
|
.Fn VOP_TRUNCATE "struct vnode *vp" "off_t length" "int flags" \
|
|
"struct ucred *cred" "struct proc *p"
|
|
.Ft int
|
|
.Fn VOP_UPDATE "struct vnode *vp" "struct timespec *access" \
|
|
"struct timespec *modify" "int flags"
|
|
.Ft int
|
|
.Fn VOP_LEASE "struct vnode *vp" "struct proc *p" "struct ucred *cred" \
|
|
"int flag"
|
|
.Ft int
|
|
.Fn VOP_WHITEOUT "struct vnode *dvp" "struct componentname *cnp" \
|
|
"int flags"
|
|
.Ft int
|
|
.Fn VOP_GETPAGES "struct vnode *vp" "voff_t offset" "struct vm_page **m" \
|
|
"int *centeridx" "int access_type" "vm_prot_t advice" "int flags"
|
|
.Ft int
|
|
.Fn VOP_PUTPAGES "struct vnode *vp" "voff_t offlo" "voff_t offlo" \
|
|
"int flags"
|
|
.Ft int
|
|
.Fn VOP_STRATEGY "struct buf *bp"
|
|
.Ft int
|
|
.Fn VOP_BWRITE "struct buf *bp"
|
|
.Pp
|
|
Not all header files are required for each function.
|
|
.Sh DESCRIPTION
|
|
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.
|
|
.Pp
|
|
Functions in the vnode operations vector are invoked using specialised
|
|
macros. The following table lists the elements of the vnode
|
|
operations vector, the corresponding invocation macro, and a
|
|
description of the element.
|
|
.Pp
|
|
.nf
|
|
.ta \w'int (*vop_reallocblks)()'u+2n +\w'VOP_REALLOCBLKS'u+2n +\w'rearrange blocks as contiguous'u
|
|
\fIVector element\fP \fIMacro\fP \fIDescription\fP
|
|
.ta \w'int (*vop_reallocblks)()'u+2n +\w'VOP_REALLOCBLKS'u+2n +\w'rearrange blocks as contiguous'u+6nC
|
|
.sp 5p
|
|
int (*vop_lookup)() VOP_LOOKUP Lookup file name in name cache
|
|
int (*vop_create)() VOP_CREATE Create a new file
|
|
int (*vop_mknod)() VOP_MKNOD Make a new device
|
|
int (*vop_open)() VOP_OPEN Open a file
|
|
int (*vop_close)() VOP_CLOSE Close a file
|
|
int (*vop_access)() VOP_ACCESS Determine file accessibility
|
|
int (*vop_getattr)() VOP_GETATTR Get file attributes
|
|
int (*vop_setattr)() VOP_SETATTR Set file attributes
|
|
int (*vop_read)() VOP_READ Read from a file
|
|
int (*vop_write)() VOP_WRITE Write to a file
|
|
int (*vop_ioctl)() VOP_IOCTL Perform device-specific I/O
|
|
int (*vop_fcntl)() VOP_FCNTL Perform file control
|
|
int (*vop_poll)() VOP_POLL Test if poll event has occurred
|
|
int (*vop_revoke)() VOP_REVOKE Eliminate vode activity
|
|
int (*vop_mmap)() VOP_MMAP Map file into user address space
|
|
int (*vop_fsync)() VOP_FSYNC Flush pending data to disk
|
|
int (*vop_seek)() VOP_SEEK Test if file is seekable
|
|
int (*vop_remove)() VOP_REMOVE Remove a file
|
|
int (*vop_link)() VOP_LINK Link a file
|
|
int (*vop_rename)() VOP_RENAME Rename a file
|
|
int (*vop_mkdir)() VOP_MKDIR Make a new directory
|
|
int (*vop_rmdir)() VOP_RMDIR Remove a directory
|
|
int (*vop_symlink)() VOP_SYMLINK Create a symbolic link
|
|
int (*vop_readdir)() VOP_READDIR Read directory entry
|
|
int (*vop_readlink)() VOP_READLINK Read contents of a symlink
|
|
int (*vop_abortop)() VOP_ABORTOP Abort pending operation
|
|
int (*vop_inactive)() VOP_INACTIVE Release the inactive vnode
|
|
int (*vop_reclaim)() VOP_RECLAIM Reclaim vnode for another file
|
|
int (*vop_lock)() VOP_LOCK Sleep until vnode lock is free
|
|
int (*vop_unlock)() VOP_UNLOCK Wake up process sleeping on lock
|
|
int (*vop_islocked)() VOP_ISLOCKED Test if vnode is locked
|
|
int (*vop_bmap)() VOP_BMAP Logical block number conversion
|
|
int (*vop_print)() VOP_PRINT Print debugging information
|
|
int (*vop_pathconf)() VOP_PATHCONF Implement POSIX pathconf support
|
|
int (*vop_advlock)() VOP_ADVLOCK Advisory record locking
|
|
int (*vop_blkatoff)() VOP_BLKATOFF Retrieve buffer from offset
|
|
int (*vop_valloc)() VOP_VALLOC Allocate fs-specific data
|
|
int (*vop_balloc)() VOP_BALLOC Allocate physical blocks
|
|
int (*vop_reallocblks)() VOP_REALLOCBLKS rearrange blocks as contiguous
|
|
int (*vop_vfree)() VOP_VFREE Release file resources
|
|
int (*vop_truncate)() VOP_TRUNCATE Truncate file and free blocks
|
|
int (*vop_update)() VOP_UPDATE Update time on a file
|
|
int (*vop_lease)() VOP_LEASE Validate vnode credentials
|
|
int (*vop_whiteout)() VOP_WHITEOUT Whiteout vnode
|
|
int (*vop_getpages)() VOP_GETPAGES Read VM pages from file
|
|
int (*vop_putpages)() VOP_PUTPAGES Write VM pages to file
|
|
int (*vop_strategy)() VOP_STRATEGY Read/write a file system buffer
|
|
int (*vop_bwrite)() VOP_BWRITE Write a file system buffer
|
|
.fi
|
|
.Pp
|
|
The implementation details of the vnode operations vector are not
|
|
quite what is described here.
|
|
.Pp
|
|
If the file system type does not support a specific operation, it must
|
|
nevertheless assign an appropriate function 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.
|
|
.Pp
|
|
Many of the functions in the vnode operations vector take a
|
|
componentname structure. Is is used to encapsulate many parameters
|
|
into a singla function argument. It has the following structure:
|
|
.Bd -literal
|
|
struct componentname {
|
|
/*
|
|
* Arguments to lookup.
|
|
*/
|
|
u_long cn_nameiop; /* namei operation */
|
|
u_long cn_flags; /* flags to namei */
|
|
struct proc *cn_proc; /* process requesting lookup */
|
|
struct ucred *cn_cred; /* credentials */
|
|
/*
|
|
* Shared between lookup and commit routines.
|
|
*/
|
|
char *cn_pnbuf; /* pathname buffer */
|
|
const char *cn_nameptr; /* pointer to looked up name */
|
|
long cn_namelen; /* length of looked up component */
|
|
u_long cn_hash; /* hash value of looked up name */
|
|
long cn_consume; /* chars to consume in lookup() */
|
|
};
|
|
.Ed
|
|
.Pp
|
|
The top half of the structure is used exclusively for the pathname
|
|
lookups using
|
|
.Fn VOP_LOOKUP
|
|
and is initialised by the caller. The semantics of the lookup are
|
|
affected by the lookup operation specified in
|
|
.Em cn_nameiop
|
|
and the flags specified in
|
|
.Em cn_flags .
|
|
Valid operations are:
|
|
.Pp
|
|
.Bl -tag -offset indent -width LOOKUP -compact
|
|
.It LOOKUP
|
|
perform name lookup only
|
|
.It CREATE
|
|
setup for file creation
|
|
.It DELETE
|
|
setup for file deletion
|
|
.It RENAME
|
|
setup for file renaming
|
|
.It OPMASK
|
|
mask for operation
|
|
.El
|
|
.Pp
|
|
Valid values for
|
|
.Em cn->cn_flags
|
|
are:
|
|
.Pp
|
|
.Bl -tag -offset indent -width LOCKPARENT -compact
|
|
.It LOCKLEAF
|
|
lock inode on return
|
|
.It LOCKPARENT
|
|
want parent vnode returned locked
|
|
.It WANTPARENT
|
|
want parent vnode returned unlocked
|
|
.It NOCACHE
|
|
name must not be left in name cache (see
|
|
.Xr namecache 9 )
|
|
.It FOLLOW
|
|
follow symbolic links
|
|
.It NOFOLLOW
|
|
do not follow symbolic links (pseudo)
|
|
.It MODMASK
|
|
mask of operational modifiers
|
|
.El
|
|
.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.
|
|
.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
|
|
.Xr vnsubr 9 .
|
|
.Sh FUNCTIONS
|
|
.Bl -tag -width compact
|
|
.It Fn VOP_LOOKUP "dvp" "vpp" "cnp"
|
|
Lookup a single pathname component in a given directory. The argument
|
|
.Fa dvp
|
|
is the locked vnode of the directory to search and
|
|
.Fa cnp
|
|
is the pathname component to be searched for. If the pathname
|
|
component is found, the address of the resulting locked vnode is
|
|
returned in
|
|
.Fa vpp .
|
|
The operation specified in
|
|
.Em cnp->cn_nameiop
|
|
gives
|
|
.Fn VOP_LOOKUP
|
|
hints about the reason for requesting the lookup and uses it to cache
|
|
file system type specific information in the vnode for subsequent
|
|
operations.
|
|
.Pp
|
|
There are three types of lookups: ".", ".." (ISDOTDOT), and other. If
|
|
the pathname component being searched for is ".", then
|
|
.Fa dvp
|
|
has an extra reference added to it and it is returned in
|
|
.Fa *vpp .
|
|
If the pathname component being search for is ".." (ISDOTDOT),
|
|
.Fa dvp
|
|
is unlocked, the ".." node is locked and then
|
|
.Fa dvp
|
|
is relocked if and only if LOCKPARENT and ISLASTCN is set in
|
|
.Em cnp->cn_flags .
|
|
If LOCKPARENT or ISLATCN is not set,
|
|
.Fa dvp
|
|
is returned unlocked on a successful lookup. This process preserves
|
|
the protocol of always locking nodes from root downward and prevents
|
|
deadlock. For other pathname components,
|
|
.Fn VOP_LOOKUP
|
|
checks the accessibility of the directory and searches the name cache
|
|
for the pathname component. See
|
|
.Xr namecache 9 .
|
|
If the pathname is not found in the name cache, the directory is
|
|
searched for the pathname. The resulting locked vnode is returned in
|
|
.Fa vpp .
|
|
If LOCKPARENT or ISLATCN is not set,
|
|
.Fa dvp
|
|
is returned unlocked on a successful lookup.
|
|
.Pp
|
|
On failure
|
|
.Fa *vpp
|
|
is NULL, and
|
|
.Fa *dvp
|
|
is left locked. If there was an error relocking
|
|
.Fa dvp
|
|
(for instance in the ISDOTDOT case) the error is returned with
|
|
PDIRUNLOCK set in
|
|
.Em cnp->cn_flags .
|
|
This flag signals to the caller that
|
|
.Fa dvp ' s
|
|
lock state has changed. If the operation is successful
|
|
.Fa *vpp
|
|
is locked and zero is returned. Typically, if
|
|
.Fa *vpp
|
|
and
|
|
.Fa dvp
|
|
are the same vnode the caller will need to release twice (decrement
|
|
the reference count) and unlock once.
|
|
.It Fn VOP_CREATE "dvp" "vpp" "cnp" "vap"
|
|
Create a new file in a given directory. The argument
|
|
.Fa dvp
|
|
is the locked vnode of the directory to create the new file in and
|
|
.Fa cnp
|
|
is the pathname component of the new file. The argument
|
|
.Fa vap
|
|
specifies the attributes that the new file should be created with. If
|
|
the file is successfully created, the address of the resulting locked
|
|
vnode is returned in
|
|
.Fa vpp
|
|
and zero is returned.
|
|
.Pp
|
|
This function is called after
|
|
.Fn VOP_LOOKUP
|
|
when a file is being created. Normally,
|
|
.Fn VOP_LOOKUP
|
|
will have set the SAVENAME flag in
|
|
.Em cnp->cn_flags
|
|
to keep the memory pointed to by
|
|
.Em cnp->cn_pnbuf
|
|
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
|
|
.Em cnp->cn_flags .
|
|
.It Fn VOP_MKNOD "dvp" "vpp" "cnp" "vap"
|
|
Make a new device-special file in a given directory. The argument
|
|
.Fa dvp
|
|
is the locked vnode of the directory to create the new device-special
|
|
file in and
|
|
.Fa cnp
|
|
is the pathname component of the new device-special file. The
|
|
argument
|
|
.Fa vap
|
|
specifies the attributes that the new device-special file should be
|
|
created with. If the file is successfully created, the address of the
|
|
resulting locked vnode is returned in
|
|
.Fa vpp
|
|
and zero is returned.
|
|
.Pp
|
|
This function is called after
|
|
.Fn VOP_LOOKUP
|
|
when a device-special file is being created. Normally,
|
|
.Fn VOP_LOOKUP
|
|
will have set the SAVENAME flag in
|
|
.Em cnp->cn_flags
|
|
to keep the memory pointed to by
|
|
.Em cnp->cn_pnbuf
|
|
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
|
|
.Em cnp->cn_flags .
|
|
.It Fn VOP_OPEN "vp" "mode" "cred" "p"
|
|
Open a file. The argument
|
|
.Fa vp
|
|
is the vnode of the file to open and
|
|
.Fa mode
|
|
specifies the access mode required by the calling process. The
|
|
calling process and its credentials are specified by
|
|
.Fa p
|
|
and
|
|
.Fa cred
|
|
respectively. The access mode is a set of flags, including FREAD,
|
|
FWRITE, O_NONBLOCK, O_APPEND, etc.
|
|
.Fn VOP_OPEN
|
|
must be called before a file can be accessed by a thread. The vnode
|
|
reference count is incremented.
|
|
.Pp
|
|
.Fn VOP_OPEN
|
|
expects the vnode
|
|
.Fa vp
|
|
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.
|
|
.It Fn VOP_CLOSE "vp" "fflag" "cred" "p"
|
|
Close a file. The argument
|
|
.Fa vp
|
|
is the vnode of the file to close and
|
|
.Fa fflags
|
|
specifies the access mode by the calling process. The calling process
|
|
and its credentials are specified by
|
|
.Fa p
|
|
and
|
|
.Fa cred
|
|
respectively.
|
|
.Fn VOP_CLOSE
|
|
must be called after a file is finished with.
|
|
.Pp
|
|
.Fn VOP_CLOSE
|
|
expects at least a reference to be associated with the vnode and does
|
|
not care whether the vnode is locked. The lock and reference state is
|
|
left unchanged on return.
|
|
.It Fn VOP_ACCESS "vp" "mode" "cred" "p"
|
|
Determine the accessibility (permissions) of the file against the
|
|
specified credentials. The argument
|
|
.Fa vp
|
|
is the vnode of the file to check,
|
|
.Fa mode
|
|
is the type of access required,
|
|
.Fa cred
|
|
contains the user credentials to check and
|
|
.Fa p
|
|
is the process which is checking the credentials. The argument
|
|
.Fa mode
|
|
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.
|
|
.Pp
|
|
The vnode
|
|
.Fa vp
|
|
will be locked on entry and should remain locked on return.
|
|
.It Fn VOP_GETATTR "vp" "vap" "cred" "p"
|
|
Get specific vnode attributes on a file. The argument
|
|
.Fa vp
|
|
is the locked vnode of the file to get the attributes for. The
|
|
arguments
|
|
.Fa p
|
|
and
|
|
.Fa cred
|
|
specifies the calling process and its credentials respectively.
|
|
.Fn VOP_GETATTR
|
|
uses the file system type specific data object
|
|
.Em vp->v_data
|
|
to reference the underlying file attributes.
|
|
Attributes associated with the file are collected by setting the
|
|
required attribute bits in
|
|
.Em vap->va_mask .
|
|
The attributes are returned in
|
|
.Fa vap .
|
|
Attributes which are not available are set to the value VNOVAL.
|
|
.Pp
|
|
For more information on vnode attributes see
|
|
.Xr vattr 9 .
|
|
.It Fn VOP_SETATTR "vp" "vap" "cred" "p"
|
|
Set specific vnode attributes on a file. The argument
|
|
.Fa vp
|
|
is the locked vnode of the file to set the attributes for. The
|
|
arguments
|
|
.Fa p
|
|
and
|
|
.Fa cred
|
|
specifies the calling process and its credentials respectively.
|
|
.Fn VOP_SETATTR
|
|
uses the file system type specific data object
|
|
.Em vp->v_data
|
|
to reference the underlying file attributes. The new attributes are
|
|
defined in
|
|
.Fa vap .
|
|
Attributes associated with the file are set by setting the required
|
|
attribute bits in
|
|
.Em vap->va_mask .
|
|
Attributes which are not being modified by
|
|
.Fn VOP_SETATTR
|
|
should be set to the value VNOVAL. If the operation is successful
|
|
zero is returned, otherwise an appropriate error is returned.
|
|
.Pp
|
|
For more information on vnode attributes see
|
|
.Xr vattr 9 .
|
|
.It Fn VOP_READ "vp" "uio" "ioflag" "cred"
|
|
Read the contents of a file. The argument
|
|
.Fa vp
|
|
is the vnode of the file to read from,
|
|
.Fa uio
|
|
is the location to read the data into,
|
|
.Fa ioflag
|
|
is a set of flags and
|
|
.Fa cred
|
|
are the credentials of the calling process.
|
|
.Pp
|
|
The
|
|
.Fa ioflag
|
|
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:
|
|
.Pp
|
|
.Bl -tag -offset indent -width IO_NODELOCKED -compact
|
|
.It IO_UNIT
|
|
do I/O as atomic unit
|
|
.It IO_APPEND
|
|
append write to end
|
|
.It IO_SYNC
|
|
do I/O synchronously
|
|
.It IO_NODELOCKED
|
|
underlying node already locked
|
|
.It IO_NDELAY
|
|
FNDELAY flag set in file table
|
|
.It IO_VMIO
|
|
data already in VMIO space
|
|
.El
|
|
.Pp
|
|
Zero is returned on success, otherwise an error is returned. The vnode
|
|
should be locked on entry and remains locked on exit.
|
|
.It Fn VOP_WRITE "vp" "uio" "ioflag" "cred"
|
|
Write to a file. The argument
|
|
.Fa vp
|
|
is the vnode of the file to write to,
|
|
.Fa uio
|
|
is the location of the data to write,
|
|
.Fa ioflag
|
|
is a set of flags and
|
|
.Fa cred
|
|
are the credentials of the calling process.
|
|
.Pp
|
|
The
|
|
.Fa ioflag
|
|
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
|
|
.Fn VOP_READ .
|
|
.Pp
|
|
Zero is returned on success, otherwise an error is returned. The vnode
|
|
should be locked on entry and remains locked on exit.
|
|
.It Fn VOP_IOCTL "vp" "command" "data" "fflag" "cred" "p"
|
|
Perform device-specific I/O. The argument
|
|
.Fa vp
|
|
is the locked vnode of the file, normally representing a device. The
|
|
argument
|
|
.Fa command
|
|
specifies the device-specific operation to perform and
|
|
.Fa cnp
|
|
provides extra data for the specified operation. The argument
|
|
.Fa fflags
|
|
is a set of flags. The argument
|
|
.Fa cred
|
|
is the caller's credentials and
|
|
.Fa p
|
|
the calling process. If the operation is successful, zero is
|
|
returned, otherwise an appropriate error code is returned.
|
|
.Pp
|
|
Most file systems do not supply a function for
|
|
.Fn VOP_IOCTL .
|
|
This function implments the
|
|
.Xr ioctl 2
|
|
system call.
|
|
.It Fn VOP_FCNTL "vp" "command" "data" "fflag" "cred" "p"
|
|
Perform file control. The argument
|
|
.Fa vp
|
|
is the locked vnode of the file. The
|
|
argument
|
|
.Fa command
|
|
specifies the operation to perform and
|
|
.Fa cnp
|
|
provides extra data for the specified operation. The argument
|
|
.Fa fflags
|
|
is a set of flags. The argument
|
|
.Fa cred
|
|
is the caller's credentials and
|
|
.Fa p
|
|
the calling process. If the operation is successful, zero is
|
|
returned, otherwise an appropriate error code is returned.
|
|
.It Fn VOP_POLL "vp" "events" "p"
|
|
Test if a poll event has occurred. The argument
|
|
.Fa vp
|
|
is the locked vnode of the file to poll and
|
|
.Fa p
|
|
is the callling process. It returns any events of interest as
|
|
specified by
|
|
.Fa events
|
|
that may have occurred for the file. The argument
|
|
.Fa events
|
|
is a set of flags as specified by
|
|
.Xr poll 2 .
|
|
If the operation is successful zero is returned, otherwise an
|
|
appropriate error code is returned.
|
|
.It Fn VOP_REVOKE "vp" "flags"
|
|
Eliminate all activity associated with the vnode
|
|
.Fa vp .
|
|
The argument
|
|
.Fa flags
|
|
is a set of flags. If REVOKEALL is set in
|
|
.Fa flags
|
|
all vnodes aliased to the vnode
|
|
.Fa vp
|
|
are also eliminated. If the operation is successful zero is returned,
|
|
otherwise an appropriate error is returned.
|
|
.It Fn VOP_MMAP "vp" "fflags" "cred" "p"
|
|
Map file into user address space. The argument
|
|
.Fa vp
|
|
is the locked vnode of the file to map into an address space. The
|
|
argument
|
|
.Fa fflags
|
|
is a set of flags. The argument
|
|
.Fa cred
|
|
is the caller's credentials and
|
|
.Fa p
|
|
the calling process requesting the map. If the operation is
|
|
successful, zero is returned, otherwise an appropriate error code is
|
|
returned.
|
|
.Pp
|
|
Most file systems do not supply a function for
|
|
.Fn VOP_MMAP .
|
|
This function implements the
|
|
.Xr mmap 2
|
|
system call.
|
|
.It Fn VOP_FSYNC "vp" "cred" "flags" "offlo" "offhi" "p"
|
|
Flush pending data buffers for a file to disk. The argument
|
|
.Fa vp
|
|
is the locked vnode of the file for flush. The argument
|
|
.Fa cred
|
|
is the caller's credentials and
|
|
.Fa p
|
|
the calling process. The argument
|
|
.Fa flags
|
|
is a set of flags. If FSYNC_WAIT is specified in
|
|
.Fa flags ,
|
|
the function should wait for I/O to complete before returning.
|
|
The argument
|
|
.Fa offlo
|
|
and
|
|
.Fa offhi
|
|
specify the range of file to flush. If the
|
|
operation is successful zero is returned, otherwise an appropriate
|
|
error code is returned.
|
|
.Pp
|
|
This function implements the
|
|
.Xr sync 2
|
|
and
|
|
.Xr fsync 2
|
|
system calls.
|
|
.It Fn VOP_SEEK "vp" "oldoff" "newoff" "cred"
|
|
Test if the file is seekable for the specified offset
|
|
.Fa oldoff .
|
|
The argument
|
|
.Fa vp
|
|
is the locked vnode of the file to test. For most filesystems this
|
|
function simply tests if
|
|
.Fa oldoff
|
|
is valid. If the specified
|
|
.Fa oldoff
|
|
is less than zero, the function returns error code EINVAL.
|
|
.It Fn VOP_REMOVE "dvp" "vp" "cnp"
|
|
Remove a file. The argument
|
|
.Fa dvp
|
|
is the locked vnode of the directory to remove the file from and
|
|
.Fa vp
|
|
is the locked vnode of the file to remove. The argument
|
|
.Fa cnp
|
|
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
|
|
.Fa dvp
|
|
and
|
|
.Fa vp
|
|
should be locked on entry and remain locked on return.
|
|
.It Fn VOP_LINK "dvp" "vp" "cnp"
|
|
Link to a file. The argument
|
|
.Fa dvp
|
|
is the locked node of the directory to create the new link and
|
|
.Fa vp
|
|
is the vnode of the file to be linked. The argument
|
|
.Fa cnp
|
|
is the pathname component of the the new link. If the operation is
|
|
successful zero is returned, otherwise an error code is returned. The
|
|
directory vnode
|
|
.Fa dvp
|
|
should be locked on entry and will remain locked on return. The vnode
|
|
.Fa vp
|
|
should not be locked on entry and will remain unlocked on return.
|
|
.It Fn VOP_RENAME "fdvp" "fvp" "fcnp" "tdvp" "tvp" "tcnp"
|
|
Rename a file. The argument
|
|
.Fa fdvp
|
|
is the vnode of the old parent directory containing in the file to be
|
|
renamed and
|
|
.Fa fvp
|
|
is the vnode of the file to be renamed. The argument
|
|
.Fa fcnp
|
|
is the pathname component about the file to be remained. The argument
|
|
.Fa tdvp
|
|
is the vnode of the new directory of the target file and
|
|
.Fa tvp
|
|
is the vnode of the target file (if it exists). The argument
|
|
.Fa tcnp
|
|
is the pathname component about the file's new name. If the operation
|
|
is successful zero is returned, otherwise and error code is returned.
|
|
.Pp
|
|
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.
|
|
.Fn VOP_RENAME
|
|
updates the reference counts prior to returning.
|
|
.It Fn VOP_MKDIR "dvp" "vpp" "cnp" "vap"
|
|
Make a new directory in a given directory. The argument
|
|
.Fa dvp
|
|
is the locked vnode of the directory to create the new directory in and
|
|
.Fa cnp
|
|
is the pathname component of the new directory. The argument
|
|
.Fa vap
|
|
specifies the attributes that the new directory should be created with. If
|
|
the file is successfully created, the address of the resulting locked
|
|
vnode is returned in
|
|
.Fa vpp
|
|
and zero is returned.
|
|
.Pp
|
|
This function is called after
|
|
.Fn VOP_LOOKUP
|
|
when a directory is being created. Normally,
|
|
.Fn VOP_LOOKUP
|
|
will have set the SAVENAME flag in
|
|
.Em cnp->cn_flags
|
|
to keep the memory pointed to by
|
|
.Em cnp->cn_pnbuf
|
|
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
|
|
.Em cnp->cn_flags .
|
|
.It Fn VOP_RMDIR "dvp" "vp" "cnp"
|
|
Remove a directory in a given directory. The argument
|
|
.Fa dvp
|
|
is the locked vnode of the directory to remove the directory from and
|
|
.Fa vp
|
|
is the locked vnode of the directory to remove. The argument
|
|
.Fa cnp
|
|
is the pathname component of the directory. Zero is returned on
|
|
success, otherwise an error code is returned. Both
|
|
.Fn dvp
|
|
and
|
|
.Fn vp
|
|
should be locked on entry and remain locked on return.
|
|
.It Fn VOP_SYMLINK "dvp" "vpp" "cnp" "vap" "target"
|
|
Create a symbolic link in a given directory. The argument
|
|
.Fa dvp
|
|
is the locked vnode of the directory to create the symbolic link in
|
|
and
|
|
.Fa cnp
|
|
is the pathname component of the symbolic link. The argument
|
|
.Fa vap
|
|
specifies the attributes that the symbolic link should be created
|
|
with and
|
|
.Fa target
|
|
specifies the pathname of the target of the symbolic link. If the
|
|
symbolic link is successfully created, the address of the resulting
|
|
locked vnode is returned in
|
|
.Fa vpp
|
|
and zero is returned.
|
|
.Pp
|
|
This function is called after
|
|
.Fn VOP_LOOKUP
|
|
when a symbolic link is being created. Normally,
|
|
.Fn VOP_LOOKUP
|
|
will have set the SAVENAME flag in
|
|
.Em cnp->cn_flags
|
|
to keep the memory pointed to by
|
|
.Em cnp->cn_pnbuf
|
|
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
|
|
.Em cnp->cn_flags .
|
|
.It Fn VOP_READDIR "vp" "uio" "cred" "eofflag" "cookies" "ncookies"
|
|
Read directory entry. The argument
|
|
.Fa vp
|
|
is the vnode of the directory to read the contents of and
|
|
.Fa uio
|
|
is the destination location to read the contents into. The argument
|
|
.Fa cred
|
|
is the caller's credientials. The argument
|
|
.Fa eofflag
|
|
is the pointer to a flag which is set by
|
|
.Fn VOP_READDIR
|
|
to indicate and end-of-file condition. If
|
|
.Fa eofflag
|
|
is NULL, the end-of-file condition is not returned. The arguments
|
|
.Fa cookies
|
|
and
|
|
.Fa ncookies
|
|
specify the addresses for the list and number of directory seek
|
|
cookies generated for NFS. Both
|
|
.Fa cookies
|
|
and
|
|
.Fa ncookies
|
|
should be NULL if they aren't required to be returned by
|
|
.Fn VOP_READDIR .
|
|
The directory contents are read into struct dirent structures. If the
|
|
operation is successful zero is returned, otherwise an appropriate
|
|
error code is returned.
|
|
.Pp
|
|
The directory should be locked on entry and will remain locked on
|
|
return.
|
|
.Pp
|
|
If
|
|
.Fn VOP_READDIR
|
|
is called from the NFS server, the extra arguments
|
|
.Fa eofflag ,
|
|
.Fa ncookies
|
|
and
|
|
.Fa cookies
|
|
are used. The value of
|
|
.Fa *eofflag
|
|
will be set to TRUE if the end of the directory is reached while
|
|
reading. The directory seek cookies are returned to the NFS client
|
|
and may be used later to restart a directory read part way through the
|
|
directory. There should be one cookie returned per directory entry.
|
|
The value of the cookie should be the offset within the directory
|
|
where the on-disk version of the appropriate directory entry starts.
|
|
.It Fn VOP_READLINK "vp" "uio" "cred"
|
|
Read the contents of a symbolic link. The argument
|
|
.Fa vp
|
|
is the locked vnode of the symlink and
|
|
.Fa uio
|
|
is the destination location to read the contents into. The argument
|
|
.Fa cred
|
|
is the credentials of the caller. If the operation is successful zero
|
|
is returned, otherwise an error code is returned.
|
|
.Pp
|
|
The vnode should be locked on entry and will remain locked on return.
|
|
.It Fn VOP_ABORTOP "dvp" "cnp"
|
|
Abort pending operation on vnode
|
|
.Fa dvp .
|
|
This operation is rarely implemented in file systems.
|
|
.It Fn VOP_INACTIVE "vp" "p"
|
|
Release the inactive vnode.
|
|
.Fn VOP_INACTIVE
|
|
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
|
|
.Fa vp
|
|
is the locked vnode to be released. The argument
|
|
.Fa p
|
|
is the calling process. If the operation is successful zero is
|
|
returned, otherwise an appropriate error code is returned. The vnode
|
|
.Fa vp
|
|
must be locked on entry, and will be unlocked on return.
|
|
.It Fn VOP_RECLAIM "vp" "p"
|
|
Reclaim the vnode for another file system.
|
|
.Fn VOP_RECLAIM
|
|
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
|
|
.Fa vp
|
|
is the locked vnode to be reclaimed. The argument
|
|
.Fa p
|
|
is the calling process. If the operation is successful zero is returned,
|
|
otherwise an appropriate error code is returned. The vnode
|
|
.Fa vp
|
|
should not be locked on entry, and will remain unlocked on return.
|
|
.It Fn VOP_LOCK "vp" "flags"
|
|
Sleep until vnode lock is free. The argument
|
|
.Fa vp
|
|
is the vnode of the file to be locked. The argument
|
|
.Fa flags
|
|
is a set of
|
|
.Xr lockmgr 9
|
|
flags. If the operation is successful zero is returned, otherwise an
|
|
appropriate error code is returned.
|
|
.Fn VOP_LOCK
|
|
is used to serialise access to the file system such as to present two
|
|
writes to the same file from happening at the same time. Kernel code
|
|
should use
|
|
.Xr vn_lock 9
|
|
to lock a vnode rather than calling
|
|
.Fn VOP_LOCK
|
|
directly.
|
|
.It Fn VOP_UNLOCK "vp" "flags"
|
|
Wake up process sleeping on lock. The argument
|
|
.Fa vp
|
|
is the vnode of the file to be unlocked. The argument
|
|
.Fa flags
|
|
is a set of
|
|
.Xr lockmgr 9
|
|
flags. If the operation is successful zero is returned, otherwise an
|
|
appropriate error code is returned.
|
|
.Fn VOP_UNLOCK
|
|
is used to serialise access to the file system such as to present two
|
|
writes to the same file from happening at the same time.
|
|
.It Fn VOP_ISLOCKED "vp"
|
|
Test if the vnode
|
|
.Fa vp
|
|
is locked. A non-zero values is returned if the vnode is not locked,
|
|
otherwise zero is returned.
|
|
.It Fn VOP_BMAP "vp" "bn" "vpp" "bnp" "runp"
|
|
Convert the logical block number
|
|
.Fa bn
|
|
of a file specified by vnode
|
|
.Fa vp
|
|
to its physical block number on the disk. If
|
|
.Fa vpp
|
|
is not NULL, the vnode of the device vnode for the file system is
|
|
returned in the address specified by
|
|
.Fa vpp .
|
|
If
|
|
.Fa runp
|
|
is not NULL, the maximum blocksize is returned in the address
|
|
specified by
|
|
.Fa runp .
|
|
.It Fn VOP_PRINT "vp"
|
|
Print debugging information. The argument
|
|
.Fa vp
|
|
is the vnode to print. If the operation is successful zero is
|
|
returned, otherwise an appropriate error code is returned.
|
|
.It Fn VOP_PATHCONF "vp" "name" "retval"
|
|
Implement POSIX
|
|
.Xr pathconf 2
|
|
and
|
|
.Xr fpathconf 2
|
|
support. The argument
|
|
.Fa vp
|
|
is the locked vnode to get information about. The argument
|
|
.Fa name
|
|
specified the type of information to return. The information
|
|
is returned in the address specified by
|
|
.Fa retval .
|
|
Valid values for
|
|
.Fa name
|
|
are:
|
|
.Pp
|
|
.Bl -tag -offset indent -width _PC_CHOWN_RESTRICTED -compact
|
|
.It _PC_LINK_MAX
|
|
return the maximum number of links to a file
|
|
.It _PC_NAME_MAX
|
|
return the maximum number of bytes in a file name
|
|
.It _PC_PATH_MAX
|
|
return the maximum number of bytes in a pathname
|
|
.It _PC_PIPE_BUF
|
|
return the maximum number of bytes which will be written atomically to
|
|
a pipe
|
|
.It _PC_CHOWN_RESTRICTED
|
|
return 1 if appropriate privileges are required for the
|
|
.Xr chown 2
|
|
system call, otherwise zero
|
|
.It _PC_NO_TRUNC
|
|
return if file names longer than KERN_NAME_MAX are truncated
|
|
.El
|
|
.Pp
|
|
If
|
|
.Fa name
|
|
is recognised,
|
|
.Fa *retval
|
|
is set to the specified value and zero is returned, otherwise an
|
|
appropriate error is returned.
|
|
.It Fn VOP_ADVLOCK "vp" "id" "op" "fl" "flags"
|
|
Manipulate Advisory record locks on a file. The argument
|
|
.Fa vp
|
|
is the vnode is the file for the advisory record lock. The argument
|
|
.Fa id
|
|
is the id token which is changing the lock and
|
|
.Fa op
|
|
is the
|
|
.Xr fcntl 2
|
|
operation to perform. The argument
|
|
.Fa fl
|
|
is a description of the lock. The argument
|
|
.Fa flags
|
|
is the set of flags. Valid values are:
|
|
.Pp
|
|
.Bl -tag -offset indent -width F_RDLCK -compact
|
|
.It F_RDLCK
|
|
shared or read lock
|
|
.It F_UNLCK
|
|
unlock
|
|
.It F_WRLCK
|
|
exclusive or write lock
|
|
.It F_WAIT
|
|
wait until lock is granted
|
|
.It F_FLOCK
|
|
use
|
|
.Xr flock 2
|
|
semantics for lock
|
|
.It F_POSIX
|
|
use POSIX semantics for lock
|
|
.El
|
|
.Pp
|
|
If the operation is successful zero is returned, otherwise an
|
|
appropriate error is returned.
|
|
.It Fn VOP_BLKATOFF "vp" "offset" "res" "bpp"
|
|
Return buffer
|
|
.Fa bpp
|
|
with the contents of block
|
|
.Fa offset
|
|
from the beginning of directory specified by vnode
|
|
.Fa vp .
|
|
If
|
|
.Fa res
|
|
is non-zero, fill it in with a pointer to the remaining space in the
|
|
directory.
|
|
.It Fn VOP_VALLOC "pvp" "mode" "cred" "vpp"
|
|
Allocate file system type specific data a new file in the file
|
|
system. The argument
|
|
.Fa pvp
|
|
specifies the vnode of the directory to create the new file.
|
|
The argument
|
|
.Fa mode
|
|
specifies file system type specific flags
|
|
and
|
|
.Fa cred
|
|
are the credentials of the calling process. The vnode of the new file
|
|
is returned in the address specified by
|
|
.Fa vpp .
|
|
.It Fn VOP_BALLOC "vp" "startoffset" "size" "cred" "flags" "bpp"
|
|
Allocate the physical blocks on a device given the vnode
|
|
.Fa vp
|
|
and the offset
|
|
logical block number
|
|
.Fa startoffset
|
|
in a file. The argument
|
|
.Fa size
|
|
specifies the size to be allocated. The credentials of the calling
|
|
processing are specified by
|
|
.Fa cred .
|
|
If the argument
|
|
.Fa bpp
|
|
is not NULL, the buffer is written to the allocated blocks. The
|
|
argument
|
|
.Fa flags
|
|
is a set of flags controlling the low-level allocation when the buffer
|
|
is written. Valid values defined in
|
|
.Pa <sys/buf.h>
|
|
are:
|
|
.Pp
|
|
.Bl -tag -offset indent -width B_CLRBUF -compact
|
|
.It B_CLRBUF
|
|
request allocated buffer be cleared
|
|
.It B_SYNC
|
|
do all allocations synchronously
|
|
.El
|
|
.P
|
|
If the operation is successful zero is returned, otherwise an
|
|
appropriate error is returned.
|
|
.It Fn VOP_REALLOCBLKS "vp" "buflist"
|
|
Rearrange block in a file to be contiguous. The argument
|
|
.Fa vp
|
|
is the vnode of the file to manipulate. The argument
|
|
.Fa buflist
|
|
is a list of buffers to rearrange. If the operation is successful
|
|
zero is returned, otherwise an appropriate error is returned.
|
|
.It Fn VOP_VFREE "pvp" "ino" "mode"
|
|
Release file resources. This function is used by the file system to
|
|
release cached file system specific data associated with the file when
|
|
the vnode is recycled.
|
|
.It Fn VOP_TRUNCATE "vp" "length" "flags" "cred" "p"
|
|
Truncate the file specified by the vnode
|
|
.Fa vp
|
|
to at most
|
|
.Fa length
|
|
size and free the unused disk blocks. The arguments
|
|
.Fa p
|
|
and
|
|
.Fa cred
|
|
is the calling process and its credentials respectively. The argument
|
|
.Fa flags
|
|
is a set of I/O flags. Valid values are:
|
|
.Pp
|
|
.Bl -tag -offset indent -width IO_ALTSEMANTICS -compact
|
|
.It IO_UNIT
|
|
do I/O as atomic unit
|
|
.It IO_APPEND
|
|
append write to end
|
|
.It IO_SYNC
|
|
sync I/O file integrity completion
|
|
.It IO_NODELOCKED
|
|
underlying node already locked
|
|
.It IO_NDELAY
|
|
FNDELAY flag set in file table
|
|
.It IO_DSYNC
|
|
sync I/O data integrity completion
|
|
.It IO_ALTSEMANTICS
|
|
use alternate i/o semantics
|
|
.El
|
|
.Pp
|
|
If the operation is successful zero is returned, otherwise an
|
|
appropriate error is returned.
|
|
.It Fn VOP_UPDATE "vp" "access" "modify" "flags"
|
|
Update times on file with vnode
|
|
.Fa vp .
|
|
The access and modification times are specified by the arguments
|
|
.Fa access
|
|
and
|
|
.Fa modify
|
|
respectively. The change time is always taken from the current time.
|
|
The argument
|
|
.Fa flags
|
|
is a set of file system type dependent flags indicating which times
|
|
should be updated.
|
|
.It Fn VOP_LEASE "vp" "p" "cred" "flag"
|
|
Validate vnode credentials and operation type. The argument
|
|
.Fa vp
|
|
is the locked vnode of the file to validate credentials
|
|
.Fa cred .
|
|
The argument
|
|
.Fa p
|
|
specifies the calling process and
|
|
.Fa flags
|
|
specifies the operation flags. If the operation is successful zero is
|
|
returned, otherwise an appropriate error code is returned. The vnode
|
|
must be locked on entry and remains locked on return.
|
|
.It Fn VOP_WHITEOUT "dvp" "cnp" "flags"
|
|
Whiteout pathname component in directory with vnode
|
|
.Fa dvp .
|
|
The argument
|
|
.Fa cnp
|
|
specifies the pathname component to whiteout.
|
|
.It Fo VOP_GETPAGES
|
|
.Fa "vp" "offset" "m" "count" "centeridx"
|
|
.Fa "access_type" "advice" "flags"
|
|
.Fc
|
|
Read VM pages from file. The argument
|
|
.Fa vp
|
|
is the locked vnode to read the VM pages from. The argument
|
|
.Fa offset
|
|
is offset in the file to start accessing and
|
|
.Fa m
|
|
is an array of VM pages.
|
|
The argument
|
|
.Fa count
|
|
specifies the number of pages to read. If the operation is successful
|
|
zero is returned, otherwise an appropriate error code is returned.
|
|
.Pp
|
|
This function is primarily used by the page-fault handing mechanism.
|
|
.It Fn VOP_PUTPAGES "vp" "offset" "len" "flags"
|
|
Write modified (dirty) VM pages to file. The argument
|
|
.Fa vp
|
|
is the locked vnode to write the VM pages to and
|
|
.Fa offset
|
|
and
|
|
.Fa len
|
|
specifies the range of VM pages to write. There seems to be some
|
|
confusion in the code whether
|
|
.Fa offset
|
|
and
|
|
.Fa len
|
|
specify the start and length of the VM pages for the start and end of
|
|
the VM pages. The argument
|
|
.Fa flags
|
|
specifies whether the pages should be written asynchronously and also
|
|
whether they should be marked invalid one the write back operation has
|
|
completed. If the operation is successful zero is returned, otherwise
|
|
an appropriate error code is returned.
|
|
.Pp
|
|
The function is primarily used by the pageout handling mechanism.
|
|
.It Fn VOP_STRATEGY "bp"
|
|
Read/write a file system buffer. The argument
|
|
.Fa bp
|
|
is the buffer to be read or written.
|
|
.Fn VOP_STRATEGY
|
|
will either read or write data to the file depending on the value of
|
|
.Em vp->b_flags .
|
|
If the operation is successful zero is returned, otherwise an
|
|
appropriate error code is returned.
|
|
.It Fn VOP_BWRITE "bp"
|
|
Write a file system buffer. The argument
|
|
.Fa bp
|
|
specifies the buffer to be written. If the operation is successful
|
|
zero is returned, otherwise an appropriate error code is returned.
|
|
.El
|
|
.Sh ERRORS
|
|
.Bl -tag -width Er
|
|
.It Bq Er ENOTDIR
|
|
The vnode does not represent a directory.
|
|
.It Bq Er ENOENT
|
|
The component was not found in the directory.
|
|
.It Bq Er ENOSPC
|
|
The file system is full.
|
|
.It Bq Er EDQUOT
|
|
Quota exceeded.
|
|
.It Bq Er EACCES
|
|
Access for the specified operation is denied.
|
|
.It Bq Er EJUSTRETURN
|
|
A CREATE or RENAME operation would be successful.
|
|
.It Bq Er EPERM
|
|
an attempt was made to change an immutable file
|
|
.It Bq Er ENOTEMPTY
|
|
attempt to remove a directory which is not empty
|
|
.It Bq Er EINVAL
|
|
attempt to read from an illegal offset in the directory; unrecognised
|
|
input
|
|
.It Bq Er EIO
|
|
a read error occurred while reading the directory or reading the
|
|
contents of a symbolic link
|
|
.It Bq Er EROFS
|
|
the filesystem is read-only
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr intro 9 ,
|
|
.Xr lock 9 ,
|
|
.Xr namei 9 ,
|
|
.Xr vattr 9 ,
|
|
.Xr vfs 9 ,
|
|
.Xr vnode 9
|
|
.Sh HISTORY
|
|
The vnode operations vector, its functions and the corresponding
|
|
macros appeared in
|
|
.Bx 4.3 .
|