vnode_if.src revision 241025
159765Sjlemon#- 259765Sjlemon# Copyright (c) 1992, 1993 359765Sjlemon# The Regents of the University of California. All rights reserved. 459765Sjlemon# 559765Sjlemon# Redistribution and use in source and binary forms, with or without 659765Sjlemon# modification, are permitted provided that the following conditions 759765Sjlemon# are met: 859765Sjlemon# 1. Redistributions of source code must retain the above copyright 959765Sjlemon# notice, this list of conditions and the following disclaimer. 1059765Sjlemon# 2. Redistributions in binary form must reproduce the above copyright 1159765Sjlemon# notice, this list of conditions and the following disclaimer in the 1259765Sjlemon# documentation and/or other materials provided with the distribution. 1359765Sjlemon# 4. Neither the name of the University nor the names of its contributors 1459765Sjlemon# may be used to endorse or promote products derived from this software 1559765Sjlemon# without specific prior written permission. 1659765Sjlemon# 1759765Sjlemon# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 1859765Sjlemon# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1959765Sjlemon# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2059765Sjlemon# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2159765Sjlemon# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2259765Sjlemon# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2359765Sjlemon# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2459765Sjlemon# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2559765Sjlemon# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2684221Sdillon# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2784221Sdillon# SUCH DAMAGE. 2884221Sdillon# 2984221Sdillon# @(#)vnode_if.src 8.12 (Berkeley) 5/14/95 3059765Sjlemon# $FreeBSD: head/sys/kern/vnode_if.src 241025 2012-09-28 11:25:02Z kib $ 3159765Sjlemon# 3259765Sjlemon 3359765Sjlemon# 3459765Sjlemon# Above each of the vop descriptors in lines starting with %% 3559765Sjlemon# is a specification of the locking protocol used by each vop call. 3659765Sjlemon# The first column is the name of the variable, the remaining three 3759765Sjlemon# columns are in, out and error respectively. The "in" column defines 3859765Sjlemon# the lock state on input, the "out" column defines the state on succesful 3959765Sjlemon# return, and the "error" column defines the locking state on error exit. 4059765Sjlemon# 4159765Sjlemon# The locking value can take the following values: 4259765Sjlemon# L: locked; not converted to type of lock. 4359765Sjlemon# A: any lock type. 4459765Sjlemon# S: locked with shared lock. 4559765Sjlemon# E: locked with exclusive lock for this process. 4659765Sjlemon# O: locked with exclusive lock for other process. 4759765Sjlemon# U: unlocked. 4859765Sjlemon# -: not applicable. vnode does not yet (or no longer) exists. 4959765Sjlemon# =: the same on input and output, may be either L or U. 5059765Sjlemon# X: locked if not nil. 5159765Sjlemon# 5259765Sjlemon# The paramater named "vpp" is assumed to be always used with double 5359765Sjlemon# indirection (**vpp) and that name is hard-coded in vnode_if.awk ! 5459765Sjlemon# 5559765Sjlemon# Lines starting with %! specify a pre or post-condition function 5659765Sjlemon# to call before/after the vop call. 5759765Sjlemon# 5859765Sjlemon# If other such parameters are introduced, they have to be added to 5959765Sjlemon# the AWK script at the head of the definition of "add_debug_code()". 6059765Sjlemon# 6159765Sjlemon 6259765Sjlemonvop_islocked { 6359765Sjlemon IN struct vnode *vp; 6459765Sjlemon}; 6559765Sjlemon 6659765Sjlemon%% lookup dvp L ? ? 6759765Sjlemon%% lookup vpp - L - 6859765Sjlemon%! lookup pre vop_lookup_pre 6959765Sjlemon%! lookup post vop_lookup_post 7059765Sjlemon 7159765Sjlemon# XXX - the lookup locking protocol defies simple description and depends 7259765Sjlemon# on the flags and operation fields in the (cnp) structure. Note 7359765Sjlemon# especially that *vpp may equal dvp and both may be locked. 7459765Sjlemon 7559765Sjlemonvop_lookup { 7659765Sjlemon IN struct vnode *dvp; 7759765Sjlemon INOUT struct vnode **vpp; 7859765Sjlemon IN struct componentname *cnp; 7959765Sjlemon}; 8059765Sjlemon 8159765Sjlemon%% cachedlookup dvp L ? ? 8259765Sjlemon%% cachedlookup vpp - L - 8359765Sjlemon 8459765Sjlemon# This must be an exact copy of lookup. See kern/vfs_cache.c for details. 8559765Sjlemon 8659765Sjlemonvop_cachedlookup { 8759765Sjlemon IN struct vnode *dvp; 8859765Sjlemon INOUT struct vnode **vpp; 8959765Sjlemon IN struct componentname *cnp; 9059765Sjlemon}; 9159765Sjlemon 9259765Sjlemon%% create dvp E E E 9359765Sjlemon%% create vpp - L - 9459765Sjlemon%! create post vop_create_post 9559765Sjlemon 9659765Sjlemonvop_create { 9759765Sjlemon IN struct vnode *dvp; 9859765Sjlemon OUT struct vnode **vpp; 9959765Sjlemon IN struct componentname *cnp; 10059765Sjlemon IN struct vattr *vap; 10159765Sjlemon}; 10259765Sjlemon 10359765Sjlemon 10459765Sjlemon%% whiteout dvp E E E 10559765Sjlemon 10659765Sjlemonvop_whiteout { 10759765Sjlemon IN struct vnode *dvp; 10859765Sjlemon IN struct componentname *cnp; 10959765Sjlemon IN int flags; 11059765Sjlemon}; 11159765Sjlemon 11259765Sjlemon 11359765Sjlemon%% mknod dvp E E E 11459765Sjlemon%% mknod vpp - L - 11559765Sjlemon%! mknod post vop_mknod_post 11659765Sjlemon 11759765Sjlemonvop_mknod { 11859765Sjlemon IN struct vnode *dvp; 11959765Sjlemon OUT struct vnode **vpp; 12059765Sjlemon IN struct componentname *cnp; 12159765Sjlemon IN struct vattr *vap; 12259765Sjlemon}; 12359765Sjlemon 12459765Sjlemon 12559765Sjlemon%% open vp L L L 12659765Sjlemon 12759765Sjlemonvop_open { 12859765Sjlemon IN struct vnode *vp; 12959765Sjlemon IN int mode; 13059765Sjlemon IN struct ucred *cred; 13159765Sjlemon IN struct thread *td; 13259765Sjlemon IN struct file *fp; 13359765Sjlemon}; 13459765Sjlemon 13559765Sjlemon 13659765Sjlemon%% close vp L L L 13759765Sjlemon 13859765Sjlemonvop_close { 13959765Sjlemon IN struct vnode *vp; 14059765Sjlemon IN int fflag; 14159765Sjlemon IN struct ucred *cred; 14259765Sjlemon IN struct thread *td; 14359765Sjlemon}; 14459765Sjlemon 14559765Sjlemon 14659765Sjlemon%% access vp L L L 14759765Sjlemon 14859765Sjlemonvop_access { 14959765Sjlemon IN struct vnode *vp; 15059765Sjlemon IN accmode_t accmode; 15159765Sjlemon IN struct ucred *cred; 15259765Sjlemon IN struct thread *td; 15359765Sjlemon}; 15459765Sjlemon 15559765Sjlemon 15659765Sjlemon%% accessx vp L L L 15759765Sjlemon 15859765Sjlemonvop_accessx { 15959765Sjlemon IN struct vnode *vp; 16059765Sjlemon IN accmode_t accmode; 16159765Sjlemon IN struct ucred *cred; 16259765Sjlemon IN struct thread *td; 16359765Sjlemon}; 16459765Sjlemon 16559765Sjlemon 16659765Sjlemon%% getattr vp L L L 16759765Sjlemon 16859765Sjlemonvop_getattr { 16959765Sjlemon IN struct vnode *vp; 17059765Sjlemon OUT struct vattr *vap; 17159765Sjlemon IN struct ucred *cred; 17259765Sjlemon}; 17359765Sjlemon 17459765Sjlemon 17559765Sjlemon%% setattr vp E E E 17659765Sjlemon%! setattr post vop_setattr_post 17759765Sjlemon 17859765Sjlemonvop_setattr { 17959765Sjlemon IN struct vnode *vp; 18059765Sjlemon IN struct vattr *vap; 18159765Sjlemon IN struct ucred *cred; 18259765Sjlemon}; 18359765Sjlemon 18459765Sjlemon%% markatime vp L L L 18559765Sjlemon 18659765Sjlemonvop_markatime { 18759765Sjlemon IN struct vnode *vp; 18859765Sjlemon}; 18959765Sjlemon 19059765Sjlemon%% read vp L L L 19159765Sjlemon 19259765Sjlemonvop_read { 19359765Sjlemon IN struct vnode *vp; 19459765Sjlemon INOUT struct uio *uio; 19559765Sjlemon IN int ioflag; 19659765Sjlemon IN struct ucred *cred; 19759765Sjlemon}; 19859765Sjlemon 19959765Sjlemon 20059765Sjlemon%% write vp L L L 20159765Sjlemon%! write pre VOP_WRITE_PRE 20259765Sjlemon%! write post VOP_WRITE_POST 20359765Sjlemon 20472093Sasmodaivop_write { 20559765Sjlemon IN struct vnode *vp; 20659765Sjlemon INOUT struct uio *uio; 20759765Sjlemon IN int ioflag; 20859765Sjlemon IN struct ucred *cred; 20959765Sjlemon}; 21059765Sjlemon 21159765Sjlemon 21259765Sjlemon%% ioctl vp U U U 21359765Sjlemon 21459765Sjlemonvop_ioctl { 21559765Sjlemon IN struct vnode *vp; 21659765Sjlemon IN u_long command; 21759765Sjlemon IN void *data; 21859765Sjlemon IN int fflag; 21959765Sjlemon IN struct ucred *cred; 22059765Sjlemon IN struct thread *td; 22159765Sjlemon}; 22259765Sjlemon 22359765Sjlemon 22459765Sjlemon%% poll vp U U U 22559765Sjlemon 22659765Sjlemonvop_poll { 22759765Sjlemon IN struct vnode *vp; 22859765Sjlemon IN int events; 22959765Sjlemon IN struct ucred *cred; 23059765Sjlemon IN struct thread *td; 23159765Sjlemon}; 23259765Sjlemon 23359765Sjlemon 23459765Sjlemon%% kqfilter vp U U U 23559765Sjlemon 23659765Sjlemonvop_kqfilter { 23759765Sjlemon IN struct vnode *vp; 23859765Sjlemon IN struct knote *kn; 23959765Sjlemon}; 24059765Sjlemon 24159765Sjlemon 24259765Sjlemon%% revoke vp L L L 24359765Sjlemon 24459765Sjlemonvop_revoke { 24559765Sjlemon IN struct vnode *vp; 24659765Sjlemon IN int flags; 24759765Sjlemon}; 24859765Sjlemon 24959765Sjlemon 25059765Sjlemon%% fsync vp L L L 25159765Sjlemon 25259765Sjlemonvop_fsync { 25359765Sjlemon IN struct vnode *vp; 25459765Sjlemon IN int waitfor; 25559765Sjlemon IN struct thread *td; 25659765Sjlemon}; 25759765Sjlemon 25859765Sjlemon 25959765Sjlemon%% remove dvp E E E 26059765Sjlemon%% remove vp E E E 26159765Sjlemon%! remove post vop_remove_post 26259765Sjlemon 26359765Sjlemonvop_remove { 26459765Sjlemon IN struct vnode *dvp; 26559765Sjlemon IN struct vnode *vp; 26659765Sjlemon IN struct componentname *cnp; 26759765Sjlemon}; 26859765Sjlemon 26959765Sjlemon 27059765Sjlemon%% link tdvp E E E 27159765Sjlemon%% link vp E E E 27259765Sjlemon%! link post vop_link_post 27359765Sjlemon 27459765Sjlemonvop_link { 27559765Sjlemon IN struct vnode *tdvp; 27659765Sjlemon IN struct vnode *vp; 27759765Sjlemon IN struct componentname *cnp; 27859765Sjlemon}; 27959765Sjlemon 28059765Sjlemon 28159765Sjlemon%! rename pre vop_rename_pre 28259765Sjlemon%! rename post vop_rename_post 28359765Sjlemon 28459765Sjlemonvop_rename { 28559765Sjlemon IN WILLRELE struct vnode *fdvp; 28659765Sjlemon IN WILLRELE struct vnode *fvp; 28759765Sjlemon IN struct componentname *fcnp; 28859765Sjlemon IN WILLRELE struct vnode *tdvp; 28959765Sjlemon IN WILLRELE struct vnode *tvp; 29059765Sjlemon IN struct componentname *tcnp; 29159765Sjlemon}; 29259765Sjlemon 29359765Sjlemon 29459765Sjlemon%% mkdir dvp E E E 29559765Sjlemon%% mkdir vpp - E - 29659765Sjlemon%! mkdir post vop_mkdir_post 29759765Sjlemon 29859765Sjlemonvop_mkdir { 29959765Sjlemon IN struct vnode *dvp; 30059765Sjlemon OUT struct vnode **vpp; 30159765Sjlemon IN struct componentname *cnp; 30259765Sjlemon IN struct vattr *vap; 30359765Sjlemon}; 30459765Sjlemon 30559765Sjlemon 30659765Sjlemon%% rmdir dvp E E E 30759765Sjlemon%% rmdir vp E E E 30859765Sjlemon%! rmdir post vop_rmdir_post 30959765Sjlemon 31059765Sjlemonvop_rmdir { 31159765Sjlemon IN struct vnode *dvp; 31259765Sjlemon IN struct vnode *vp; 31359765Sjlemon IN struct componentname *cnp; 31459765Sjlemon}; 31559765Sjlemon 31659765Sjlemon 31759765Sjlemon%% symlink dvp E E E 31859765Sjlemon%% symlink vpp - E - 31959765Sjlemon%! symlink post vop_symlink_post 32059765Sjlemon 32159765Sjlemonvop_symlink { 32259765Sjlemon IN struct vnode *dvp; 32359765Sjlemon OUT struct vnode **vpp; 32459765Sjlemon IN struct componentname *cnp; 32559765Sjlemon IN struct vattr *vap; 32659765Sjlemon IN char *target; 32759765Sjlemon}; 32859765Sjlemon 32959765Sjlemon 33059765Sjlemon%% readdir vp L L L 33159765Sjlemon 33259765Sjlemonvop_readdir { 33359765Sjlemon IN struct vnode *vp; 33459765Sjlemon INOUT struct uio *uio; 33559765Sjlemon IN struct ucred *cred; 33659765Sjlemon INOUT int *eofflag; 33759765Sjlemon OUT int *ncookies; 33859765Sjlemon INOUT u_long **cookies; 33959765Sjlemon}; 34059765Sjlemon 34159765Sjlemon 34259765Sjlemon%% readlink vp L L L 34359765Sjlemon 34459765Sjlemonvop_readlink { 34559765Sjlemon IN struct vnode *vp; 34659765Sjlemon INOUT struct uio *uio; 34759765Sjlemon IN struct ucred *cred; 34859765Sjlemon}; 34959765Sjlemon 35059765Sjlemon 35159765Sjlemon%% inactive vp E E E 35259765Sjlemon 35359765Sjlemonvop_inactive { 35459765Sjlemon IN struct vnode *vp; 35559765Sjlemon IN struct thread *td; 356276079Sian}; 35759765Sjlemon 358298230Sallanjude 35959765Sjlemon%% reclaim vp E E E 36059765Sjlemon 36159765Sjlemonvop_reclaim { 36259765Sjlemon IN struct vnode *vp; 36359765Sjlemon IN struct thread *td; 36459765Sjlemon}; 36559765Sjlemon 36659765Sjlemon 36759765Sjlemon%! lock1 pre vop_lock_pre 36859765Sjlemon%! lock1 post vop_lock_post 36959765Sjlemon 37059765Sjlemonvop_lock1 { 37159765Sjlemon IN struct vnode *vp; 37259765Sjlemon IN int flags; 37359765Sjlemon IN char *file; 37459765Sjlemon IN int line; 37559765Sjlemon}; 37659765Sjlemon 37759765Sjlemon 37859765Sjlemon%! unlock pre vop_unlock_pre 37959765Sjlemon%! unlock post vop_unlock_post 38059765Sjlemon 38159765Sjlemonvop_unlock { 38259765Sjlemon IN struct vnode *vp; 38359765Sjlemon IN int flags; 38459765Sjlemon}; 38559765Sjlemon 38659765Sjlemon 38759765Sjlemon%% bmap vp L L L 38859765Sjlemon 38959765Sjlemonvop_bmap { 39059765Sjlemon IN struct vnode *vp; 39159765Sjlemon IN daddr_t bn; 39259765Sjlemon OUT struct bufobj **bop; 39359765Sjlemon IN daddr_t *bnp; 39459765Sjlemon OUT int *runp; 39559765Sjlemon OUT int *runb; 39659765Sjlemon}; 39759765Sjlemon 398276079Sian 39959765Sjlemon%% strategy vp L L L 400298230Sallanjude%! strategy pre vop_strategy_pre 40159765Sjlemon 40259765Sjlemonvop_strategy { 40359765Sjlemon IN struct vnode *vp; 40459765Sjlemon IN struct buf *bp; 40559765Sjlemon}; 40659765Sjlemon 40759765Sjlemon 40859765Sjlemon%% getwritemount vp = = = 40959765Sjlemon 41059765Sjlemonvop_getwritemount { 41159765Sjlemon IN struct vnode *vp; 41259765Sjlemon OUT struct mount **mpp; 41359765Sjlemon}; 41459765Sjlemon 41559765Sjlemon 41659765Sjlemon%% print vp - - - 41759765Sjlemon 41859765Sjlemonvop_print { 41959765Sjlemon IN struct vnode *vp; 42059765Sjlemon}; 42159765Sjlemon 42259765Sjlemon 42359765Sjlemon%% pathconf vp L L L 42459765Sjlemon 42559765Sjlemonvop_pathconf { 42659765Sjlemon IN struct vnode *vp; 42759765Sjlemon IN int name; 42859765Sjlemon OUT register_t *retval; 42959765Sjlemon}; 43059765Sjlemon 43159765Sjlemon 43259765Sjlemon%% advlock vp U U U 43359765Sjlemon 43459765Sjlemonvop_advlock { 43559765Sjlemon IN struct vnode *vp; 43659765Sjlemon IN void *id; 43759765Sjlemon IN int op; 43859765Sjlemon IN struct flock *fl; 43959765Sjlemon IN int flags; 44059765Sjlemon}; 44159765Sjlemon 44259765Sjlemon 44359765Sjlemon%% advlockasync vp U U U 44459765Sjlemon 44559765Sjlemonvop_advlockasync { 44659765Sjlemon IN struct vnode *vp; 44759765Sjlemon IN void *id; 44859765Sjlemon IN int op; 44959765Sjlemon IN struct flock *fl; 45059765Sjlemon IN int flags; 45159765Sjlemon IN struct task *task; 45259765Sjlemon INOUT void **cookiep; 45359765Sjlemon}; 45459765Sjlemon 45559765Sjlemon 45659765Sjlemon%% advlockpurge vp E E E 45759765Sjlemon 45859765Sjlemonvop_advlockpurge { 45959765Sjlemon IN struct vnode *vp; 46059765Sjlemon}; 46159765Sjlemon 46259765Sjlemon 46359765Sjlemon%% reallocblks vp E E E 46459765Sjlemon 46559765Sjlemonvop_reallocblks { 46659765Sjlemon IN struct vnode *vp; 46759765Sjlemon IN struct cluster_save *buflist; 46859765Sjlemon}; 46959765Sjlemon 47059765Sjlemon 47159765Sjlemon%% getpages vp L L L 47259765Sjlemon 47359765Sjlemonvop_getpages { 47459765Sjlemon IN struct vnode *vp; 47559765Sjlemon IN vm_page_t *m; 47659765Sjlemon IN int count; 47759765Sjlemon IN int reqpage; 47859765Sjlemon IN vm_ooffset_t offset; 47959765Sjlemon}; 48059765Sjlemon 48159765Sjlemon 48259765Sjlemon%% putpages vp E E E 48359765Sjlemon 48459765Sjlemonvop_putpages { 48559765Sjlemon IN struct vnode *vp; 48659765Sjlemon IN vm_page_t *m; 48759765Sjlemon IN int count; 48859765Sjlemon IN int sync; 48959765Sjlemon IN int *rtvals; 49059765Sjlemon IN vm_ooffset_t offset; 49159765Sjlemon}; 49259765Sjlemon 49359765Sjlemon 49459765Sjlemon%% getacl vp L L L 49559765Sjlemon 49659765Sjlemonvop_getacl { 49759765Sjlemon IN struct vnode *vp; 49859765Sjlemon IN acl_type_t type; 49959765Sjlemon OUT struct acl *aclp; 50059765Sjlemon IN struct ucred *cred; 50159765Sjlemon IN struct thread *td; 50259765Sjlemon}; 50359765Sjlemon 50459765Sjlemon 50559765Sjlemon%% setacl vp E E E 50659765Sjlemon 50759765Sjlemonvop_setacl { 50859765Sjlemon IN struct vnode *vp; 50959765Sjlemon IN acl_type_t type; 510276079Sian IN struct acl *aclp; 51159765Sjlemon IN struct ucred *cred; 512298230Sallanjude IN struct thread *td; 51359765Sjlemon}; 51459765Sjlemon 51559765Sjlemon 51659765Sjlemon%% aclcheck vp = = = 51759765Sjlemon 51859765Sjlemonvop_aclcheck { 51959765Sjlemon IN struct vnode *vp; 52059765Sjlemon IN acl_type_t type; 52159765Sjlemon IN struct acl *aclp; 52259765Sjlemon IN struct ucred *cred; 52359765Sjlemon IN struct thread *td; 52459765Sjlemon}; 52559765Sjlemon 52659765Sjlemon 52759765Sjlemon%% closeextattr vp L L L 52859765Sjlemon 52959765Sjlemonvop_closeextattr { 53059765Sjlemon IN struct vnode *vp; 53159765Sjlemon IN int commit; 53259765Sjlemon IN struct ucred *cred; 53359765Sjlemon IN struct thread *td; 53459765Sjlemon}; 53559765Sjlemon 53659765Sjlemon 53759765Sjlemon%% getextattr vp L L L 53859765Sjlemon 539251561Spfgvop_getextattr { 54059765Sjlemon IN struct vnode *vp; 54159765Sjlemon IN int attrnamespace; 54259765Sjlemon IN const char *name; 54359765Sjlemon INOUT struct uio *uio; 54459765Sjlemon OUT size_t *size; 54559765Sjlemon IN struct ucred *cred; 54659765Sjlemon IN struct thread *td; 54759765Sjlemon}; 54859765Sjlemon 54959765Sjlemon 55059765Sjlemon%% listextattr vp L L L 55159765Sjlemon 55259765Sjlemonvop_listextattr { 55359765Sjlemon IN struct vnode *vp; 55459765Sjlemon IN int attrnamespace; 55559765Sjlemon INOUT struct uio *uio; 55659765Sjlemon OUT size_t *size; 55759765Sjlemon IN struct ucred *cred; 55859765Sjlemon IN struct thread *td; 55959765Sjlemon}; 56059765Sjlemon 56159765Sjlemon 56259765Sjlemon%% openextattr vp L L L 56359765Sjlemon 56459765Sjlemonvop_openextattr { 56559765Sjlemon IN struct vnode *vp; 56659765Sjlemon IN struct ucred *cred; 56759765Sjlemon IN struct thread *td; 56859765Sjlemon}; 56959765Sjlemon 57059765Sjlemon 571276079Sian%% deleteextattr vp E E E 57259765Sjlemon%! deleteextattr post vop_deleteextattr_post 573298230Sallanjude 57459765Sjlemonvop_deleteextattr { 57559765Sjlemon IN struct vnode *vp; 57659765Sjlemon IN int attrnamespace; 57759765Sjlemon IN const char *name; 57859765Sjlemon IN struct ucred *cred; 57959765Sjlemon IN struct thread *td; 58059765Sjlemon}; 58159765Sjlemon 58259765Sjlemon 58359765Sjlemon%% setextattr vp E E E 58459765Sjlemon%! setextattr post vop_setextattr_post 58559765Sjlemon 58659765Sjlemonvop_setextattr { 58759765Sjlemon IN struct vnode *vp; 588251561Spfg IN int attrnamespace; 58959765Sjlemon IN const char *name; 59059765Sjlemon INOUT struct uio *uio; 59159765Sjlemon IN struct ucred *cred; 59259765Sjlemon IN struct thread *td; 59359765Sjlemon}; 59459765Sjlemon 59559765Sjlemon 59659765Sjlemon%% setlabel vp E E E 59759765Sjlemon 59859765Sjlemonvop_setlabel { 59959765Sjlemon IN struct vnode *vp; 60059765Sjlemon IN struct label *label; 60159765Sjlemon IN struct ucred *cred; 60259765Sjlemon IN struct thread *td; 60359765Sjlemon}; 60459765Sjlemon 60596941Siedowse 60659765Sjlemon%% vptofh vp = = = 60759765Sjlemon 60859765Sjlemonvop_vptofh { 60959765Sjlemon IN struct vnode *vp; 61059765Sjlemon IN struct fid *fhp; 61159765Sjlemon}; 61259765Sjlemon 61359765Sjlemon 61459765Sjlemon%% vptocnp vp L L L 61559765Sjlemon%% vptocnp vpp - U - 61659765Sjlemon 61759765Sjlemonvop_vptocnp { 61859765Sjlemon IN struct vnode *vp; 61959765Sjlemon OUT struct vnode **vpp; 62059765Sjlemon IN struct ucred *cred; 62159765Sjlemon INOUT char *buf; 62259765Sjlemon INOUT int *buflen; 62359765Sjlemon}; 62459765Sjlemon 62559765Sjlemon 62659765Sjlemon%% allocate vp E E E 62759765Sjlemon 62859765Sjlemonvop_allocate { 62959765Sjlemon IN struct vnode *vp; 63059765Sjlemon INOUT off_t *offset; 63159765Sjlemon INOUT off_t *len; 63259765Sjlemon}; 63359765Sjlemon 63459765Sjlemon%% advise vp U U U 63559765Sjlemon 63659765Sjlemonvop_advise { 63759765Sjlemon IN struct vnode *vp; 63859765Sjlemon IN off_t start; 63959765Sjlemon IN off_t end; 64059765Sjlemon IN int advice; 64159765Sjlemon}; 64259765Sjlemon 64359765Sjlemon%% unp_bind vp E E E 64459765Sjlemon 64559765Sjlemonvop_unp_bind { 64659765Sjlemon IN struct vnode *vp; 64759765Sjlemon IN struct socket *socket; 64859765Sjlemon}; 64959765Sjlemon 65059765Sjlemon%% unp_connect vp L L L 65159765Sjlemon 65259765Sjlemonvop_unp_connect { 65359765Sjlemon IN struct vnode *vp; 65459765Sjlemon OUT struct socket **socket; 65559765Sjlemon}; 65659765Sjlemon 65759765Sjlemon%% unp_detach vp = = = 65859765Sjlemon 65959765Sjlemonvop_unp_detach { 66059765Sjlemon IN struct vnode *vp; 66159765Sjlemon}; 66259765Sjlemon 66359765Sjlemon%% is_text vp L L L 66459765Sjlemon 66559765Sjlemonvop_is_text { 66659765Sjlemon IN struct vnode *vp; 66759765Sjlemon}; 668276079Sian 66959765Sjlemon%% set_text vp E E E 670298230Sallanjude 67159765Sjlemonvop_set_text { 67259765Sjlemon IN struct vnode *vp; 67359765Sjlemon}; 67459765Sjlemon 67559765Sjlemon%% vop_unset_text vp E E E 67659765Sjlemon 67759765Sjlemonvop_unset_text { 67859765Sjlemon IN struct vnode *vp; 67996941Siedowse}; 68059765Sjlemon 68159765Sjlemon# The VOPs below are spares at the end of the table to allow new VOPs to be 68259765Sjlemon# added in stable branches without breaking the KBI. New VOPs in HEAD should 68359765Sjlemon# be added above these spares. When merging a new VOP to a stable branch, 68459765Sjlemon# the new VOP should replace one of the spares. 68559765Sjlemon 68659765Sjlemonvop_spare1 { 68759765Sjlemon IN struct vnode *vp; 68859765Sjlemon}; 68959765Sjlemon 69059765Sjlemonvop_spare2 { 69159765Sjlemon IN struct vnode *vp; 69259765Sjlemon}; 69359765Sjlemon 69459765Sjlemonvop_spare3 { 69559765Sjlemon IN struct vnode *vp; 69659765Sjlemon}; 69759765Sjlemon 69859765Sjlemonvop_spare4 { 69959765Sjlemon IN struct vnode *vp; 70059765Sjlemon}; 70159765Sjlemon 70259765Sjlemonvop_spare5 { 70359765Sjlemon IN struct vnode *vp; 70459765Sjlemon}; 70559765Sjlemon