diff options
Diffstat (limited to 'sys/kern/vnode_if.src')
-rw-r--r-- | sys/kern/vnode_if.src | 716 |
1 files changed, 716 insertions, 0 deletions
diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src new file mode 100644 index 0000000..eabfb43 --- /dev/null +++ b/sys/kern/vnode_if.src @@ -0,0 +1,716 @@ +#- +# 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. +# 4. 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.12 (Berkeley) 5/14/95 +# $FreeBSD$ +# + +# +# Above each of the vop descriptors in lines starting with %% +# 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 succesful +# return, and the "error" column defines the locking state on error exit. +# +# The locking value can take the following values: +# L: locked; not converted to type of lock. +# A: any lock type. +# S: locked with shared lock. +# E: locked with exclusive lock for this process. +# O: locked with exclusive lock for other process. +# 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. +# +# The paramater named "vpp" is assumed to be always used with double +# indirection (**vpp) and that name is hard-coded in vnode_if.awk ! +# +# Lines starting with %! specify a pre or post-condition function +# to call before/after the vop call. +# +# If other such parameters are introduced, they have to be added to +# the AWK script at the head of the definition of "add_debug_code()". +# + +vop_islocked { + IN struct vnode *vp; +}; + +%% lookup dvp L L L +%% lookup vpp - L - + +# XXX - the lookup locking protocol defies simple description and depends +# on the flags and operation fields in the (cnp) structure. Note +# especially that *vpp may equal dvp and both may be locked. + +vop_lookup { + IN struct vnode *dvp; + INOUT struct vnode **vpp; + IN struct componentname *cnp; +}; + +%% cachedlookup dvp L L L +%% cachedlookup vpp - L - + +# This must be an exact copy of lookup. See kern/vfs_cache.c for details. + +vop_cachedlookup { + IN struct vnode *dvp; + INOUT struct vnode **vpp; + IN struct componentname *cnp; +}; + +%% create dvp E E E +%% create vpp - L - +%! create post vop_create_post + +vop_create { + IN struct vnode *dvp; + OUT struct vnode **vpp; + IN struct componentname *cnp; + IN struct vattr *vap; +}; + + +%% whiteout dvp E E E + +vop_whiteout { + IN struct vnode *dvp; + IN struct componentname *cnp; + IN int flags; +}; + + +%% mknod dvp E E E +%% mknod vpp - L - +%! mknod post vop_mknod_post + +vop_mknod { + IN struct vnode *dvp; + OUT struct vnode **vpp; + IN struct componentname *cnp; + IN struct vattr *vap; +}; + + +%% open vp L L L + +vop_open { + IN struct vnode *vp; + IN int mode; + IN struct ucred *cred; + IN struct thread *td; + IN struct file *fp; +}; + + +%% close vp L L L + +vop_close { + IN struct vnode *vp; + IN int fflag; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% access vp L L L + +vop_access { + IN struct vnode *vp; + IN accmode_t accmode; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% accessx vp L L L + +vop_accessx { + IN struct vnode *vp; + IN accmode_t accmode; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% getattr vp L L L + +vop_getattr { + IN struct vnode *vp; + OUT struct vattr *vap; + IN struct ucred *cred; +}; + + +%% setattr vp E E E +%! setattr post vop_setattr_post + +vop_setattr { + IN struct vnode *vp; + IN struct vattr *vap; + IN struct ucred *cred; +}; + +%% markatime vp L L L + +vop_markatime { + IN struct vnode *vp; +}; + +%% read vp L L L + +vop_read { + IN struct vnode *vp; + INOUT struct uio *uio; + IN int ioflag; + IN struct ucred *cred; +}; + + +%% write vp L L L +%! write pre VOP_WRITE_PRE +%! write post VOP_WRITE_POST + +vop_write { + IN struct vnode *vp; + INOUT struct uio *uio; + IN int ioflag; + IN struct ucred *cred; +}; + + +%% ioctl vp U U U + +vop_ioctl { + IN struct vnode *vp; + IN u_long command; + IN void *data; + IN int fflag; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% poll vp U U U + +vop_poll { + IN struct vnode *vp; + IN int events; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% kqfilter vp U U U + +vop_kqfilter { + IN struct vnode *vp; + IN struct knote *kn; +}; + + +%% revoke vp L L L + +vop_revoke { + IN struct vnode *vp; + IN int flags; +}; + + +%% fsync vp L L L + +vop_fsync { + IN struct vnode *vp; + IN int waitfor; + IN struct thread *td; +}; + + +%% remove dvp E E E +%% remove vp E E E +%! remove post vop_remove_post + +vop_remove { + IN struct vnode *dvp; + IN struct vnode *vp; + IN struct componentname *cnp; +}; + + +%% link tdvp E E E +%% link vp E E E +%! link post vop_link_post + +vop_link { + IN struct vnode *tdvp; + IN struct vnode *vp; + IN struct componentname *cnp; +}; + + +%! rename pre vop_rename_pre +%! rename post vop_rename_post + +vop_rename { + IN WILLRELE struct vnode *fdvp; + IN WILLRELE struct vnode *fvp; + IN struct componentname *fcnp; + IN WILLRELE struct vnode *tdvp; + IN WILLRELE struct vnode *tvp; + IN struct componentname *tcnp; +}; + + +%% mkdir dvp E E E +%% mkdir vpp - E - +%! mkdir post vop_mkdir_post + +vop_mkdir { + IN struct vnode *dvp; + OUT struct vnode **vpp; + IN struct componentname *cnp; + IN struct vattr *vap; +}; + + +%% rmdir dvp E E E +%% rmdir vp E E E +%! rmdir post vop_rmdir_post + +vop_rmdir { + IN struct vnode *dvp; + IN struct vnode *vp; + IN struct componentname *cnp; +}; + + +%% symlink dvp E E E +%% symlink vpp - E - +%! symlink post vop_symlink_post + +vop_symlink { + IN struct vnode *dvp; + OUT struct vnode **vpp; + IN struct componentname *cnp; + IN struct vattr *vap; + IN char *target; +}; + + +%% readdir vp L L L + +vop_readdir { + IN struct vnode *vp; + INOUT struct uio *uio; + IN struct ucred *cred; + INOUT int *eofflag; + OUT int *ncookies; + INOUT u_long **cookies; +}; + + +%% readlink vp L L L + +vop_readlink { + IN struct vnode *vp; + INOUT struct uio *uio; + IN struct ucred *cred; +}; + + +%% inactive vp E E E + +vop_inactive { + IN struct vnode *vp; + IN struct thread *td; +}; + + +%% reclaim vp E E E + +vop_reclaim { + IN struct vnode *vp; + IN struct thread *td; +}; + + +%! lock1 pre vop_lock_pre +%! lock1 post vop_lock_post + +vop_lock1 { + IN struct vnode *vp; + IN int flags; + IN char *file; + IN int line; +}; + + +%! unlock pre vop_unlock_pre +%! unlock post vop_unlock_post + +vop_unlock { + IN struct vnode *vp; + IN int flags; +}; + + +%% bmap vp L L L + +vop_bmap { + IN struct vnode *vp; + IN daddr_t bn; + OUT struct bufobj **bop; + IN daddr_t *bnp; + OUT int *runp; + OUT int *runb; +}; + + +%% strategy vp L L L +%! strategy pre vop_strategy_pre + +vop_strategy { + IN struct vnode *vp; + IN struct buf *bp; +}; + + +%% getwritemount vp = = = + +vop_getwritemount { + IN struct vnode *vp; + OUT struct mount **mpp; +}; + + +%% print vp - - - + +vop_print { + IN struct vnode *vp; +}; + + +%% pathconf vp L L L + +vop_pathconf { + IN struct vnode *vp; + IN int name; + OUT register_t *retval; +}; + + +%% advlock vp U U U + +vop_advlock { + IN struct vnode *vp; + IN void *id; + IN int op; + IN struct flock *fl; + IN int flags; +}; + + +%% advlockasync vp U U U + +vop_advlockasync { + IN struct vnode *vp; + IN void *id; + IN int op; + IN struct flock *fl; + IN int flags; + IN struct task *task; + INOUT void **cookiep; +}; + + +%% advlockpurge vp E E E + +vop_advlockpurge { + IN struct vnode *vp; +}; + + +%% reallocblks vp E E E + +vop_reallocblks { + IN struct vnode *vp; + IN struct cluster_save *buflist; +}; + + +%% getpages vp L L L + +vop_getpages { + IN struct vnode *vp; + IN vm_page_t *m; + IN int count; + IN int reqpage; + IN vm_ooffset_t offset; +}; + + +%% putpages vp E E E + +vop_putpages { + IN struct vnode *vp; + IN vm_page_t *m; + IN int count; + IN int sync; + IN int *rtvals; + IN vm_ooffset_t offset; +}; + + +%% getacl vp L L L + +vop_getacl { + IN struct vnode *vp; + IN acl_type_t type; + OUT struct acl *aclp; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% setacl vp E E E + +vop_setacl { + IN struct vnode *vp; + IN acl_type_t type; + IN struct acl *aclp; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% aclcheck vp = = = + +vop_aclcheck { + IN struct vnode *vp; + IN acl_type_t type; + IN struct acl *aclp; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% closeextattr vp L L L + +vop_closeextattr { + IN struct vnode *vp; + IN int commit; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% getextattr vp L L L + +vop_getextattr { + IN struct vnode *vp; + IN int attrnamespace; + IN const char *name; + INOUT struct uio *uio; + OUT size_t *size; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% listextattr vp L L L + +vop_listextattr { + IN struct vnode *vp; + IN int attrnamespace; + INOUT struct uio *uio; + OUT size_t *size; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% openextattr vp L L L + +vop_openextattr { + IN struct vnode *vp; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% deleteextattr vp E E E +%! deleteextattr post vop_deleteextattr_post + +vop_deleteextattr { + IN struct vnode *vp; + IN int attrnamespace; + IN const char *name; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% setextattr vp E E E +%! setextattr post vop_setextattr_post + +vop_setextattr { + IN struct vnode *vp; + IN int attrnamespace; + IN const char *name; + INOUT struct uio *uio; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% setlabel vp E E E + +vop_setlabel { + IN struct vnode *vp; + IN struct label *label; + IN struct ucred *cred; + IN struct thread *td; +}; + + +%% vptofh vp = = = + +vop_vptofh { + IN struct vnode *vp; + IN struct fid *fhp; +}; + + +%% vptocnp vp L L L +%% vptocnp vpp - U - + +vop_vptocnp { + IN struct vnode *vp; + OUT struct vnode **vpp; + IN struct ucred *cred; + INOUT char *buf; + INOUT int *buflen; +}; + + +%% allocate vp E E E + +vop_allocate { + IN struct vnode *vp; + INOUT off_t *offset; + INOUT off_t *len; +}; + +%% advise vp U U U + +vop_advise { + IN struct vnode *vp; + IN off_t start; + IN off_t end; + IN int advice; +}; + +%% unp_bind vp E E E + +vop_unp_bind { + IN struct vnode *vp; + IN struct socket *socket; +}; + +%% unp_connect vp L L L + +vop_unp_connect { + IN struct vnode *vp; + OUT struct socket **socket; +}; + +%% unp_detach vp = = = + +vop_unp_detach { + IN struct vnode *vp; +}; + +%% is_text vp L L L + +vop_is_text { + IN struct vnode *vp; +}; + +%% set_text vp E E E + +vop_set_text { + IN struct vnode *vp; +}; + +%% vop_unset_text vp E E E + +vop_unset_text { + IN struct vnode *vp; +}; + +%% get_writecount vp L L L + +vop_get_writecount { + IN struct vnode *vp; + OUT int *writecount; +}; + +%% add_writecount vp E E E + +vop_add_writecount { + IN struct vnode *vp; + IN int inc; +}; + +# The VOPs below are spares at the end of the table to allow new VOPs to be +# added in stable branches without breaking the KBI. New VOPs in HEAD should +# be added above these spares. When merging a new VOP to a stable branch, +# the new VOP should replace one of the spares. + +vop_spare1 { + IN struct vnode *vp; +}; + +vop_spare2 { + IN struct vnode *vp; +}; + +vop_spare3 { + IN struct vnode *vp; +}; + +vop_spare4 { + IN struct vnode *vp; +}; + +vop_spare5 { + IN struct vnode *vp; +}; |