NetBSD/sys/kern/vnode_if.src

647 lines
11 KiB
Plaintext

# $NetBSD: vnode_if.src,v 1.85 2023/06/15 09:13:36 hannken Exp $
#
# Copyright (c) 1992, 1993
# The Regents of the University of California. 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, 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. Neither the name of the University 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 REGENTS 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 REGENTS 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.
#
# @(#)vnode_if.src 8.14 (Berkeley) 8/6/95
#
#
#
# Above each of the vop descriptors is a specification of the locking
# protocol used by each vop call. The first column is the name of
# the variable, the remaining three columns are in, out and error
# respectively. The "in" column defines the lock state on input,
# the "out" column defines the state on successful return, and the
# "error" column defines the locking state on error exit.
#
# The locking value can take the following values:
# L: locked.
# U: unlocked.
# -: not applicable. vnode does not yet (or no longer) exists.
# =: the same on input and output, may be either L or U.
# X: locked if not nil.
#
# For operations other than VOP_LOOKUP which require a component name
# parameter, the flags required for the initial namei() call are listed.
# Additional flags may be added to the namei() call, but these are required.
#
#
#% bwrite vp = = =
#
vop_bwrite {
IN struct vnode *vp;
IN struct buf *bp;
};
#
#% parsepath dvp = = =
#
vop_parsepath {
FSTRANS=NO
IN struct vnode *dvp;
IN const char *name;
OUT size_t *retval;
};
#
#% lookup dvp L L L
#% lookup vpp - U -
#
# Note especially that *vpp may equal dvp.
#
# More details:
# All lookups find the named node (creating the vnode if needed) and
# return it, referenced and unlocked, in *vpp.
# On failure, *vpp is NULL, and *dvp is left locked.
#
vop_lookup {
VERSION 2
IN LOCKED=YES struct vnode *dvp;
OUT WILLMAKE struct vnode **vpp;
IN struct componentname *cnp;
};
#
#% create dvp L L L
#% create vpp - U -
#
#! create cnp CREATE, LOCKPARENT
#
vop_create {
VERSION 3
POST=vop_create_post
IN LOCKED=EXCL struct vnode *dvp;
OUT WILLMAKE struct vnode **vpp;
IN struct componentname *cnp;
IN struct vattr *vap;
};
#
#% mknod dvp L L L
#% mknod vpp - U -
#
#! mknod cnp CREATE, LOCKPARENT
#
vop_mknod {
VERSION 3
POST=vop_mknod_post
IN LOCKED=EXCL struct vnode *dvp;
OUT WILLMAKE struct vnode **vpp;
IN struct componentname *cnp;
IN struct vattr *vap;
};
#
#% open vp L L L
#
vop_open {
POST=vop_open_post
IN LOCKED=YES struct vnode *vp;
IN int mode;
IN kauth_cred_t cred;
};
#
#% close vp L L L
#
vop_close {
POST=vop_close_post
IN LOCKED=YES struct vnode *vp;
IN int fflag;
IN kauth_cred_t cred;
};
#
#% access vp L L L
#
vop_access {
IN LOCKED=YES struct vnode *vp;
IN accmode_t accmode;
IN kauth_cred_t cred;
};
#
#% accessx vp L L L
#
vop_accessx {
IN LOCKED=YES struct vnode *vp;
IN accmode_t accmode;
IN kauth_cred_t cred;
};
#
#% getattr vp L L L
#
vop_getattr {
IN LOCKED=YES struct vnode *vp;
IN struct vattr *vap;
IN kauth_cred_t cred;
};
#
#% setattr vp L L L
#
vop_setattr {
PRE=vop_setattr_pre
POST=vop_setattr_post
IN LOCKED=EXCL struct vnode *vp;
IN struct vattr *vap;
IN kauth_cred_t cred;
};
#
#% read vp L L L
#
vop_read {
POST=vop_read_post
IN LOCKED=YES struct vnode *vp;
INOUT struct uio *uio;
IN int ioflag;
IN kauth_cred_t cred;
};
#
#% write vp L L L
#
vop_write {
PRE=vop_write_pre
POST=vop_write_post
IN LOCKED=YES struct vnode *vp;
INOUT struct uio *uio;
IN int ioflag;
IN kauth_cred_t cred;
};
#
#% fallocate vp L L L
#
vop_fallocate {
IN LOCKED=YES struct vnode *vp;
IN off_t pos;
IN off_t len;
};
#
#% fdiscard vp L L L
#
vop_fdiscard {
IN LOCKED=YES struct vnode *vp;
IN off_t pos;
IN off_t len;
};
#
#% ioctl vp = = =
#
vop_ioctl {
FSTRANS=NO
IN struct vnode *vp;
IN u_long command;
IN void *data;
IN int fflag;
IN kauth_cred_t cred;
};
#
#% fcntl vp U U U
#
vop_fcntl {
FSTRANS=NO
IN LOCKED=NO struct vnode *vp;
IN u_int command;
IN void *data;
IN int fflag;
IN kauth_cred_t cred;
};
#
#% poll vp U U U
#
vop_poll {
IN LOCKED=NO struct vnode *vp;
IN int events;
};
#
#% kqfilter vp U U U
#
vop_kqfilter {
IN LOCKED=NO struct vnode *vp;
IN struct knote *kn;
};
#
#% revoke vp U U U
#
vop_revoke {
FSTRANS=NO
IN LOCKED=NO struct vnode *vp;
IN int flags;
};
#
#% mmap vp = = =
#
vop_mmap {
IN struct vnode *vp;
IN vm_prot_t prot;
IN kauth_cred_t cred;
};
#
#% fsync vp L L L
#
vop_fsync {
IN LOCKED=YES struct vnode *vp;
IN kauth_cred_t cred;
IN int flags;
IN off_t offlo;
IN off_t offhi;
};
#
# Needs work: Is newoff right? What's it mean?
# XXX Locking protocol?
#
vop_seek {
IN struct vnode *vp;
IN off_t oldoff;
IN off_t newoff;
IN kauth_cred_t cred;
};
#
#% remove dvp L L L
#% remove vp L U U
#
#! remove cnp DELETE, LOCKPARENT | LOCKLEAF
#
vop_remove {
VERSION 3
PRE=vop_remove_pre
POST=vop_remove_post
IN LOCKED=EXCL struct vnode *dvp;
IN LOCKED=YES WILLPUT struct vnode *vp;
IN struct componentname *cnp;
CONTEXT nlink_t vp_new_nlink;
};
#
#% link dvp L L L
#% link vp U U U
#
#! link cnp CREATE, LOCKPARENT
#
vop_link {
VERSION 2
POST=vop_link_post
IN LOCKED=EXCL struct vnode *dvp;
IN LOCKED=NO struct vnode *vp;
IN struct componentname *cnp;
};
#
#% rename fdvp U U U
#% rename fvp U U U
#% rename tdvp L U U
#% rename tvp X U U
#
#! rename fcnp DELETE, LOCKPARENT
#! rename tcnp RENAME, LOCKPARENT | LOCKLEAF | NOCACHE
#
vop_rename {
IN WILLRELE struct vnode *fdvp;
IN WILLRELE struct vnode *fvp;
IN struct componentname *fcnp;
IN LOCKED=YES WILLPUT struct vnode *tdvp;
IN WILLPUT struct vnode *tvp;
IN struct componentname *tcnp;
};
#
#% mkdir dvp L L L
#% mkdir vpp - U -
#
#! mkdir cnp CREATE, LOCKPARENT
#
vop_mkdir {
VERSION 3
POST=vop_mkdir_post
IN LOCKED=EXCL struct vnode *dvp;
OUT WILLMAKE struct vnode **vpp;
IN struct componentname *cnp;
IN struct vattr *vap;
};
#
#% rmdir dvp L L L
#% rmdir vp L U U
#
#! rmdir cnp DELETE, LOCKPARENT | LOCKLEAF
#
vop_rmdir {
VERSION 2
PRE=vop_rmdir_pre
POST=vop_rmdir_post
IN LOCKED=EXCL struct vnode *dvp;
IN LOCKED=EXCL WILLPUT struct vnode *vp;
IN struct componentname *cnp;
};
#
#% symlink dvp L L L
#% symlink vpp - U -
#
#! symlink cnp CREATE, LOCKPARENT
#
vop_symlink {
VERSION 3
POST=vop_symlink_post
IN LOCKED=EXCL struct vnode *dvp;
OUT WILLMAKE struct vnode **vpp;
IN struct componentname *cnp;
IN struct vattr *vap;
IN char *target;
};
#
#% readdir vp L L L
#
vop_readdir {
IN LOCKED=YES struct vnode *vp;
INOUT struct uio *uio;
IN kauth_cred_t cred;
OUT int *eofflag;
OUT off_t **cookies;
IN int *ncookies;
};
#
#% readlink vp L L L
#
vop_readlink {
IN LOCKED=YES struct vnode *vp;
INOUT struct uio *uio;
IN kauth_cred_t cred;
};
#
#% abortop dvp = = =
#
#! abortop cnp as appropriate.
#
vop_abortop {
IN struct vnode *dvp;
IN struct componentname *cnp;
};
#
#% inactive vp L L L
#
vop_inactive {
VERSION 2
IN LOCKED=EXCL struct vnode *vp;
INOUT bool *recycle;
};
#
#% reclaim vp L U U
#
vop_reclaim {
VERSION 2
FSTRANS=NO
IN LOCKED=EXCL struct vnode *vp;
};
#
#% lock vp U L U
#
vop_lock {
FSTRANS=LOCK
IN struct vnode *vp;
IN int flags;
};
#
#% unlock vp L U L
#
vop_unlock {
FSTRANS=UNLOCK
IN LOCKED=YES struct vnode *vp;
};
#
#% bmap vp = = =
#% bmap vpp - U -
#
vop_bmap {
IN struct vnode *vp;
IN daddr_t bn;
OUT struct vnode **vpp;
IN daddr_t *bnp;
OUT int *runp;
};
#
#% strategy vp = = =
#
vop_strategy {
FSTRANS=NO
IN struct vnode *vp;
IN struct buf *bp;
};
#
#% print vp = = =
#
vop_print {
IN struct vnode *vp;
};
#
#% islocked vp = = =
#
vop_islocked {
FSTRANS=NO
IN struct vnode *vp;
};
#
#% pathconf vp L L L
#
vop_pathconf {
IN LOCKED=YES struct vnode *vp;
IN int name;
OUT register_t *retval;
};
#
#% advlock vp U U U
#
vop_advlock {
FSTRANS=NO
IN LOCKED=NO struct vnode *vp;
IN void *id;
IN int op;
IN struct flock *fl;
IN int flags;
};
#
#% whiteout dvp L L L
#% whiteout cnp - - -
#% whiteout flag - - -
#
#! whiteout cnp CREATE, LOCKPARENT
#
vop_whiteout {
IN LOCKED=EXCL struct vnode *dvp;
IN struct componentname *cnp;
IN int flags;
};
#
#% getpages vp = = =
#
vop_getpages {
FSTRANS=NO
IN struct vnode *vp;
IN voff_t offset;
IN struct vm_page **m;
IN int *count;
IN int centeridx;
IN vm_prot_t access_type;
IN int advice;
IN int flags;
};
#
#% putpages vp = = =
#
vop_putpages {
FSTRANS=NO
IN struct vnode *vp;
IN voff_t offlo;
IN voff_t offhi;
IN int flags;
};
#
#% getacl vp L L L
#
vop_getacl {
IN struct vnode *vp;
IN acl_type_t type;
OUT struct acl *aclp;
IN kauth_cred_t cred;
};
#
#% setacl vp L L L
#
vop_setacl {
POST=vop_setacl_post
IN LOCKED=EXCL struct vnode *vp;
IN acl_type_t type;
IN struct acl *aclp;
IN kauth_cred_t cred;
};
#
#% aclcheck vp = = =
#
vop_aclcheck {
IN struct vnode *vp;
IN acl_type_t type;
IN struct acl *aclp;
IN kauth_cred_t cred;
};
#
#% closeextattr vp L L L
#
vop_closeextattr {
IN LOCKED=YES struct vnode *vp;
IN int commit;
IN kauth_cred_t cred;
};
#
#% getextattr vp L L L
#
vop_getextattr {
IN LOCKED=YES struct vnode *vp;
IN int attrnamespace;
IN const char *name;
INOUT struct uio *uio;
OUT size_t *size;
IN kauth_cred_t cred;
};
#
#% listextattr vp L L L
#
vop_listextattr {
IN LOCKED=YES struct vnode *vp;
IN int attrnamespace;
INOUT struct uio *uio;
OUT size_t *size;
IN int flag;
IN kauth_cred_t cred;
};
#
#% openextattr vp L L L
#
vop_openextattr {
IN LOCKED=YES struct vnode *vp;
IN kauth_cred_t cred;
};
#
#% deleteextattr vp L L L
#
vop_deleteextattr {
IN LOCKED=EXCL struct vnode *vp;
IN int attrnamespace;
IN const char *name;
IN kauth_cred_t cred;
};
#
#% setextattr vp L L L
#
vop_setextattr {
IN LOCKED=EXCL struct vnode *vp;
IN int attrnamespace;
IN const char *name;
INOUT struct uio *uio;
IN kauth_cred_t cred;
};