1139804Simp#- 21541Srgrimes# Copyright (c) 1992, 1993 31541Srgrimes# The Regents of the University of California. All rights reserved. 41541Srgrimes# 51541Srgrimes# Redistribution and use in source and binary forms, with or without 61541Srgrimes# modification, are permitted provided that the following conditions 71541Srgrimes# are met: 81541Srgrimes# 1. Redistributions of source code must retain the above copyright 91541Srgrimes# notice, this list of conditions and the following disclaimer. 101541Srgrimes# 2. Redistributions in binary form must reproduce the above copyright 111541Srgrimes# notice, this list of conditions and the following disclaimer in the 121541Srgrimes# documentation and/or other materials provided with the distribution. 131541Srgrimes# 4. Neither the name of the University nor the names of its contributors 141541Srgrimes# may be used to endorse or promote products derived from this software 151541Srgrimes# without specific prior written permission. 161541Srgrimes# 171541Srgrimes# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 181541Srgrimes# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 191541Srgrimes# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 201541Srgrimes# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 211541Srgrimes# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 221541Srgrimes# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 231541Srgrimes# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 241541Srgrimes# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 251541Srgrimes# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 261541Srgrimes# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 271541Srgrimes# SUCH DAMAGE. 281541Srgrimes# 2922521Sdyson# @(#)vnode_if.src 8.12 (Berkeley) 5/14/95 3050477Speter# $FreeBSD$ 311541Srgrimes# 3222521Sdyson 3322521Sdyson# 34159082Sdds# Above each of the vop descriptors in lines starting with %% 35159082Sdds# is a specification of the locking protocol used by each vop call. 36159082Sdds# The first column is the name of the variable, the remaining three 37159082Sdds# columns are in, out and error respectively. The "in" column defines 38159082Sdds# the lock state on input, the "out" column defines the state on succesful 39159082Sdds# return, and the "error" column defines the locking state on error exit. 4022521Sdyson# 4122521Sdyson# The locking value can take the following values: 4254444Seivind# L: locked; not converted to type of lock. 4354444Seivind# A: any lock type. 4454444Seivind# S: locked with shared lock. 4554444Seivind# E: locked with exclusive lock for this process. 4654444Seivind# O: locked with exclusive lock for other process. 4745058Seivind# U: unlocked. 4822521Sdyson# -: not applicable. vnode does not yet (or no longer) exists. 4922521Sdyson# =: the same on input and output, may be either L or U. 5022521Sdyson# X: locked if not nil. 5122521Sdyson# 52116615Sse# The paramater named "vpp" is assumed to be always used with double 53229728Sjhb# indirection (**vpp) and that name is hard-coded in vnode_if.awk ! 54116615Sse# 55159082Sdds# Lines starting with %! specify a pre or post-condition function 56159082Sdds# to call before/after the vop call. 57159082Sdds# 58116615Sse# If other such parameters are introduced, they have to be added to 59116615Sse# the AWK script at the head of the definition of "add_debug_code()". 60116615Sse# 6122521Sdyson 6251679Seivindvop_islocked { 6351679Seivind IN struct vnode *vp; 6451679Seivind}; 6551679Seivind 66243271Savg%% lookup dvp L L L 67159082Sdds%% lookup vpp - L - 68159082Sdds 6922521Sdyson# XXX - the lookup locking protocol defies simple description and depends 7022521Sdyson# on the flags and operation fields in the (cnp) structure. Note 7122521Sdyson# especially that *vpp may equal dvp and both may be locked. 72159082Sdds 731541Srgrimesvop_lookup { 741541Srgrimes IN struct vnode *dvp; 751541Srgrimes INOUT struct vnode **vpp; 761541Srgrimes IN struct componentname *cnp; 771541Srgrimes}; 781541Srgrimes 79243271Savg%% cachedlookup dvp L L L 80159082Sdds%% cachedlookup vpp - L - 81159082Sdds 8228732Sphk# This must be an exact copy of lookup. See kern/vfs_cache.c for details. 83159082Sdds 8428732Sphkvop_cachedlookup { 8528732Sphk IN struct vnode *dvp; 8628732Sphk INOUT struct vnode **vpp; 8728732Sphk IN struct componentname *cnp; 8828732Sphk}; 8928732Sphk 90159082Sdds%% create dvp E E E 91159082Sdds%% create vpp - L - 92159082Sdds%! create post vop_create_post 93159082Sdds 941541Srgrimesvop_create { 9535823Smsmith IN struct vnode *dvp; 961541Srgrimes OUT struct vnode **vpp; 971541Srgrimes IN struct componentname *cnp; 981541Srgrimes IN struct vattr *vap; 991541Srgrimes}; 1001541Srgrimes 101159082Sdds 102159082Sdds%% whiteout dvp E E E 103159082Sdds 10422521Sdysonvop_whiteout { 10535823Smsmith IN struct vnode *dvp; 10622521Sdyson IN struct componentname *cnp; 10722521Sdyson IN int flags; 10822521Sdyson}; 10922521Sdyson 110159082Sdds 111159082Sdds%% mknod dvp E E E 112159082Sdds%% mknod vpp - L - 113159082Sdds%! mknod post vop_mknod_post 114159082Sdds 1151541Srgrimesvop_mknod { 11635823Smsmith IN struct vnode *dvp; 11753101Seivind OUT struct vnode **vpp; 1181541Srgrimes IN struct componentname *cnp; 1191541Srgrimes IN struct vattr *vap; 1201541Srgrimes}; 1211541Srgrimes 122159082Sdds 123159082Sdds%% open vp L L L 124159082Sdds 1251541Srgrimesvop_open { 1261541Srgrimes IN struct vnode *vp; 1271541Srgrimes IN int mode; 1281541Srgrimes IN struct ucred *cred; 12983366Sjulian IN struct thread *td; 130170152Skib IN struct file *fp; 1311541Srgrimes}; 1321541Srgrimes 133159082Sdds 134189696Sjhb%% close vp L L L 135159082Sdds 1361541Srgrimesvop_close { 1371541Srgrimes IN struct vnode *vp; 1381541Srgrimes IN int fflag; 1391541Srgrimes IN struct ucred *cred; 14083366Sjulian IN struct thread *td; 1411541Srgrimes}; 1421541Srgrimes 143159082Sdds 144159082Sdds%% access vp L L L 145159082Sdds 1461541Srgrimesvop_access { 1471541Srgrimes IN struct vnode *vp; 148184413Strasz IN accmode_t accmode; 1491541Srgrimes IN struct ucred *cred; 15083366Sjulian IN struct thread *td; 1511541Srgrimes}; 1521541Srgrimes 153159082Sdds 154193092Strasz%% accessx vp L L L 155193092Strasz 156193092Straszvop_accessx { 157193092Strasz IN struct vnode *vp; 158193092Strasz IN accmode_t accmode; 159193092Strasz IN struct ucred *cred; 160193092Strasz IN struct thread *td; 161193092Strasz}; 162193092Strasz 163193092Strasz 164159082Sdds%% getattr vp L L L 165159082Sdds 1661541Srgrimesvop_getattr { 1671541Srgrimes IN struct vnode *vp; 16854803Srwatson OUT struct vattr *vap; 1691541Srgrimes IN struct ucred *cred; 1701541Srgrimes}; 1711541Srgrimes 172159082Sdds 173159082Sdds%% setattr vp E E E 174159082Sdds%! setattr post vop_setattr_post 175159082Sdds 1761541Srgrimesvop_setattr { 1771541Srgrimes IN struct vnode *vp; 1781541Srgrimes IN struct vattr *vap; 1791541Srgrimes IN struct ucred *cred; 1801541Srgrimes}; 1811541Srgrimes 182187526Sjhb%% markatime vp L L L 183159082Sdds 184187526Sjhbvop_markatime { 185187526Sjhb IN struct vnode *vp; 186187526Sjhb}; 187187526Sjhb 188159082Sdds%% read vp L L L 189159082Sdds 1901541Srgrimesvop_read { 1911541Srgrimes IN struct vnode *vp; 1921541Srgrimes INOUT struct uio *uio; 1931541Srgrimes IN int ioflag; 1941541Srgrimes IN struct ucred *cred; 1951541Srgrimes}; 1961541Srgrimes 197159082Sdds 198193762Sps%% write vp L L L 199159082Sdds%! write pre VOP_WRITE_PRE 200159082Sdds%! write post VOP_WRITE_POST 201159082Sdds 2021541Srgrimesvop_write { 2031541Srgrimes IN struct vnode *vp; 2041541Srgrimes INOUT struct uio *uio; 2051541Srgrimes IN int ioflag; 2061541Srgrimes IN struct ucred *cred; 2071541Srgrimes}; 2081541Srgrimes 209159082Sdds 210159082Sdds%% ioctl vp U U U 211159082Sdds 2121541Srgrimesvop_ioctl { 2131541Srgrimes IN struct vnode *vp; 21422521Sdyson IN u_long command; 215153400Sdes IN void *data; 2161541Srgrimes IN int fflag; 2171541Srgrimes IN struct ucred *cred; 21883366Sjulian IN struct thread *td; 2191541Srgrimes}; 2201541Srgrimes 221159082Sdds 222184377Sjhb%% poll vp U U U 223159082Sdds 22429353Spetervop_poll { 2251541Srgrimes IN struct vnode *vp; 22629353Speter IN int events; 2271541Srgrimes IN struct ucred *cred; 22883366Sjulian IN struct thread *td; 2291541Srgrimes}; 2301541Srgrimes 231159082Sdds 232159082Sdds%% kqfilter vp U U U 233159082Sdds 23472521Sjlemonvop_kqfilter { 23572521Sjlemon IN struct vnode *vp; 23672521Sjlemon IN struct knote *kn; 23772521Sjlemon}; 23872521Sjlemon 239159082Sdds 240159082Sdds%% revoke vp L L L 241159082Sdds 24222521Sdysonvop_revoke { 24322521Sdyson IN struct vnode *vp; 24422521Sdyson IN int flags; 24522521Sdyson}; 24622521Sdyson 247159082Sdds 248194019Sps%% fsync vp L L L 249159082Sdds 2501541Srgrimesvop_fsync { 2511541Srgrimes IN struct vnode *vp; 2521541Srgrimes IN int waitfor; 25383366Sjulian IN struct thread *td; 2541541Srgrimes}; 2551541Srgrimes 256159082Sdds 257159082Sdds%% remove dvp E E E 258159082Sdds%% remove vp E E E 259159082Sdds%! remove post vop_remove_post 260159082Sdds 2611541Srgrimesvop_remove { 26235823Smsmith IN struct vnode *dvp; 26335823Smsmith IN struct vnode *vp; 2641541Srgrimes IN struct componentname *cnp; 2651541Srgrimes}; 2661541Srgrimes 267159082Sdds 268159082Sdds%% link tdvp E E E 269159082Sdds%% link vp E E E 270159082Sdds%! link post vop_link_post 271159082Sdds 2729842Sdgvop_link { 27335823Smsmith IN struct vnode *tdvp; 2749842Sdg IN struct vnode *vp; 2759842Sdg IN struct componentname *cnp; 2769842Sdg}; 2771541Srgrimes 278159082Sdds 279159082Sdds%! rename pre vop_rename_pre 280159082Sdds%! rename post vop_rename_post 281159082Sdds 2821541Srgrimesvop_rename { 2831541Srgrimes IN WILLRELE struct vnode *fdvp; 2841541Srgrimes IN WILLRELE struct vnode *fvp; 2851541Srgrimes IN struct componentname *fcnp; 2861541Srgrimes IN WILLRELE struct vnode *tdvp; 2871541Srgrimes IN WILLRELE struct vnode *tvp; 2881541Srgrimes IN struct componentname *tcnp; 2891541Srgrimes}; 2901541Srgrimes 291159082Sdds 292159082Sdds%% mkdir dvp E E E 293159082Sdds%% mkdir vpp - E - 294159082Sdds%! mkdir post vop_mkdir_post 295159082Sdds 2961541Srgrimesvop_mkdir { 29735823Smsmith IN struct vnode *dvp; 2981541Srgrimes OUT struct vnode **vpp; 2991541Srgrimes IN struct componentname *cnp; 3001541Srgrimes IN struct vattr *vap; 3011541Srgrimes}; 3021541Srgrimes 303159082Sdds 304159082Sdds%% rmdir dvp E E E 305159082Sdds%% rmdir vp E E E 306159082Sdds%! rmdir post vop_rmdir_post 307159082Sdds 3081541Srgrimesvop_rmdir { 30935823Smsmith IN struct vnode *dvp; 31035823Smsmith IN struct vnode *vp; 3111541Srgrimes IN struct componentname *cnp; 3121541Srgrimes}; 3131541Srgrimes 314159082Sdds 315159082Sdds%% symlink dvp E E E 316159082Sdds%% symlink vpp - E - 317159082Sdds%! symlink post vop_symlink_post 318159082Sdds 3191541Srgrimesvop_symlink { 32035823Smsmith IN struct vnode *dvp; 32153131Seivind OUT struct vnode **vpp; 3221541Srgrimes IN struct componentname *cnp; 3231541Srgrimes IN struct vattr *vap; 3241541Srgrimes IN char *target; 3251541Srgrimes}; 3261541Srgrimes 327159082Sdds 328159082Sdds%% readdir vp L L L 329159082Sdds 3301541Srgrimesvop_readdir { 3311541Srgrimes IN struct vnode *vp; 3321541Srgrimes INOUT struct uio *uio; 3331541Srgrimes IN struct ucred *cred; 3343167Sdfr INOUT int *eofflag; 33522521Sdyson OUT int *ncookies; 33622521Sdyson INOUT u_long **cookies; 3371541Srgrimes}; 3381541Srgrimes 339159082Sdds 340159082Sdds%% readlink vp L L L 341159082Sdds 3421541Srgrimesvop_readlink { 3431541Srgrimes IN struct vnode *vp; 3441541Srgrimes INOUT struct uio *uio; 3451541Srgrimes IN struct ucred *cred; 3461541Srgrimes}; 3471541Srgrimes 348159082Sdds 349159082Sdds%% inactive vp E E E 350159082Sdds 3511541Srgrimesvop_inactive { 3521541Srgrimes IN struct vnode *vp; 35383366Sjulian IN struct thread *td; 3541541Srgrimes}; 3551541Srgrimes 356159082Sdds 357159082Sdds%% reclaim vp E E E 358159082Sdds 3591541Srgrimesvop_reclaim { 3601541Srgrimes IN struct vnode *vp; 36183366Sjulian IN struct thread *td; 3621541Srgrimes}; 3631541Srgrimes 364159082Sdds 365169671Skib%! lock1 pre vop_lock_pre 366169671Skib%! lock1 post vop_lock_post 367159082Sdds 368169671Skibvop_lock1 { 3691541Srgrimes IN struct vnode *vp; 37022521Sdyson IN int flags; 371164248Skmacy IN char *file; 372164248Skmacy IN int line; 3731541Srgrimes}; 3741541Srgrimes 375159082Sdds 376159082Sdds%! unlock pre vop_unlock_pre 377159082Sdds%! unlock post vop_unlock_post 378159082Sdds 3791541Srgrimesvop_unlock { 3801541Srgrimes IN struct vnode *vp; 38122521Sdyson IN int flags; 3821541Srgrimes}; 3831541Srgrimes 384159082Sdds 385159082Sdds%% bmap vp L L L 386159082Sdds 3871541Srgrimesvop_bmap { 3881541Srgrimes IN struct vnode *vp; 38996572Sphk IN daddr_t bn; 390137726Sphk OUT struct bufobj **bop; 39196572Sphk IN daddr_t *bnp; 3921541Srgrimes OUT int *runp; 39310551Sdyson OUT int *runb; 3941541Srgrimes}; 3951541Srgrimes 396159082Sdds 397159082Sdds%% strategy vp L L L 398159082Sdds%! strategy pre vop_strategy_pre 399159082Sdds 40037384Sjulianvop_strategy { 40137384Sjulian IN struct vnode *vp; 40237384Sjulian IN struct buf *bp; 40337384Sjulian}; 4041541Srgrimes 405159082Sdds 406159082Sdds%% getwritemount vp = = = 407159082Sdds 40862976Smckusickvop_getwritemount { 40962976Smckusick IN struct vnode *vp; 41062976Smckusick OUT struct mount **mpp; 41162976Smckusick}; 41262976Smckusick 413159082Sdds 414176590Skib%% print vp - - - 415159082Sdds 4161541Srgrimesvop_print { 4171541Srgrimes IN struct vnode *vp; 4181541Srgrimes}; 4191541Srgrimes 420159082Sdds 421159082Sdds%% pathconf vp L L L 422159082Sdds 4231541Srgrimesvop_pathconf { 4241541Srgrimes IN struct vnode *vp; 4251541Srgrimes IN int name; 42622521Sdyson OUT register_t *retval; 4271541Srgrimes}; 4281541Srgrimes 429159082Sdds 430159082Sdds%% advlock vp U U U 431159082Sdds 4321541Srgrimesvop_advlock { 4331541Srgrimes IN struct vnode *vp; 434153400Sdes IN void *id; 4351541Srgrimes IN int op; 4361541Srgrimes IN struct flock *fl; 4371541Srgrimes IN int flags; 4381541Srgrimes}; 4391541Srgrimes 440159082Sdds 441177633Sdfr%% advlockasync vp U U U 442177633Sdfr 443177633Sdfrvop_advlockasync { 444177633Sdfr IN struct vnode *vp; 445177633Sdfr IN void *id; 446177633Sdfr IN int op; 447177633Sdfr IN struct flock *fl; 448177633Sdfr IN int flags; 449177633Sdfr IN struct task *task; 450177633Sdfr INOUT void **cookiep; 451177633Sdfr}; 452177633Sdfr 453177633Sdfr 454208003Szml%% advlockpurge vp E E E 455208003Szml 456208003Szmlvop_advlockpurge { 457208003Szml IN struct vnode *vp; 458208003Szml}; 459208003Szml 460208003Szml 461159082Sdds%% reallocblks vp E E E 462159082Sdds 4631541Srgrimesvop_reallocblks { 4641541Srgrimes IN struct vnode *vp; 4651541Srgrimes IN struct cluster_save *buflist; 4661541Srgrimes}; 4671541Srgrimes 468159082Sdds 469159082Sdds%% getpages vp L L L 470159082Sdds 47110551Sdysonvop_getpages { 47210551Sdyson IN struct vnode *vp; 47310551Sdyson IN vm_page_t *m; 47410551Sdyson IN int count; 47510551Sdyson IN int reqpage; 47612767Sdyson IN vm_ooffset_t offset; 47710551Sdyson}; 47810551Sdyson 479159082Sdds 480259296Skib%% putpages vp L L L 481159082Sdds 48210551Sdysonvop_putpages { 48310551Sdyson IN struct vnode *vp; 48410551Sdyson IN vm_page_t *m; 48510551Sdyson IN int count; 48610551Sdyson IN int sync; 48710551Sdyson IN int *rtvals; 48812767Sdyson IN vm_ooffset_t offset; 48910551Sdyson}; 49011704Sdyson 491159082Sdds 492159082Sdds%% getacl vp L L L 493159082Sdds 49454803Srwatsonvop_getacl { 49554803Srwatson IN struct vnode *vp; 49654803Srwatson IN acl_type_t type; 49754803Srwatson OUT struct acl *aclp; 49854803Srwatson IN struct ucred *cred; 49983366Sjulian IN struct thread *td; 50054803Srwatson}; 50154803Srwatson 502159082Sdds 503159082Sdds%% setacl vp E E E 504159082Sdds 50554803Srwatsonvop_setacl { 50654803Srwatson IN struct vnode *vp; 50754803Srwatson IN acl_type_t type; 50854803Srwatson IN struct acl *aclp; 50954803Srwatson IN struct ucred *cred; 51083366Sjulian IN struct thread *td; 51154803Srwatson}; 51254803Srwatson 513159082Sdds 514159082Sdds%% aclcheck vp = = = 515159082Sdds 51654803Srwatsonvop_aclcheck { 51754803Srwatson IN struct vnode *vp; 51854803Srwatson IN acl_type_t type; 51954803Srwatson IN struct acl *aclp; 52054803Srwatson IN struct ucred *cred; 52183366Sjulian IN struct thread *td; 52254803Srwatson}; 52354803Srwatson 524159082Sdds 525159082Sdds%% closeextattr vp L L L 526159082Sdds 527102990Sphkvop_closeextattr { 528102990Sphk IN struct vnode *vp; 529102990Sphk IN int commit; 530102990Sphk IN struct ucred *cred; 531102990Sphk IN struct thread *td; 532102990Sphk}; 533102990Sphk 534159082Sdds 535159082Sdds%% getextattr vp L L L 536159082Sdds 53754803Srwatsonvop_getextattr { 53854803Srwatson IN struct vnode *vp; 53974437Srwatson IN int attrnamespace; 54065119Srwatson IN const char *name; 54154803Srwatson INOUT struct uio *uio; 54290448Srwatson OUT size_t *size; 54354803Srwatson IN struct ucred *cred; 54483366Sjulian IN struct thread *td; 54554803Srwatson}; 54654803Srwatson 547159082Sdds 548159082Sdds%% listextattr vp L L L 549159082Sdds 550115867Srwatsonvop_listextattr { 551115867Srwatson IN struct vnode *vp; 552115867Srwatson IN int attrnamespace; 553115867Srwatson INOUT struct uio *uio; 554115867Srwatson OUT size_t *size; 555115867Srwatson IN struct ucred *cred; 556115867Srwatson IN struct thread *td; 557115867Srwatson}; 558115867Srwatson 559159082Sdds 560159082Sdds%% openextattr vp L L L 561159082Sdds 562102990Sphkvop_openextattr { 563102990Sphk IN struct vnode *vp; 564102990Sphk IN struct ucred *cred; 565102990Sphk IN struct thread *td; 566102990Sphk}; 567102990Sphk 568159082Sdds 569159082Sdds%% deleteextattr vp E E E 570228849Sjhb%! deleteextattr post vop_deleteextattr_post 571159082Sdds 572118131Srwatsonvop_deleteextattr { 573116698Srwatson IN struct vnode *vp; 574116698Srwatson IN int attrnamespace; 575116698Srwatson IN const char *name; 576116698Srwatson IN struct ucred *cred; 577116698Srwatson IN struct thread *td; 578116698Srwatson}; 579116698Srwatson 580159082Sdds 581159082Sdds%% setextattr vp E E E 582228849Sjhb%! setextattr post vop_setextattr_post 583159082Sdds 58454803Srwatsonvop_setextattr { 58554803Srwatson IN struct vnode *vp; 58674437Srwatson IN int attrnamespace; 58765119Srwatson IN const char *name; 58854803Srwatson INOUT struct uio *uio; 58954803Srwatson IN struct ucred *cred; 59083366Sjulian IN struct thread *td; 59154803Srwatson}; 59265770Sbp 593159082Sdds 594159082Sdds%% setlabel vp E E E 595159082Sdds 596100984Srwatsonvop_setlabel { 597100984Srwatson IN struct vnode *vp; 598100984Srwatson IN struct label *label; 599100984Srwatson IN struct ucred *cred; 600100984Srwatson IN struct thread *td; 601100984Srwatson}; 602166774Spjd 603166774Spjd 604184377Sjhb%% vptofh vp = = = 605166774Spjd 606166774Spjdvop_vptofh { 607166774Spjd IN struct vnode *vp; 608166774Spjd IN struct fid *fhp; 609166774Spjd}; 610185956Smarcus 611220791Smdf 612185956Smarcus%% vptocnp vp L L L 613185956Smarcus%% vptocnp vpp - U - 614185956Smarcus 615185956Smarcusvop_vptocnp { 616185956Smarcus IN struct vnode *vp; 617185956Smarcus OUT struct vnode **vpp; 618194601Skib IN struct ucred *cred; 619185956Smarcus INOUT char *buf; 620185956Smarcus INOUT int *buflen; 621185956Smarcus}; 622220791Smdf 623220791Smdf 624220846Smdf%% allocate vp E E E 625220791Smdf 626220791Smdfvop_allocate { 627220791Smdf IN struct vnode *vp; 628221836Smdf INOUT off_t *offset; 629221836Smdf INOUT off_t *len; 630220791Smdf}; 631227070Sjhb 632227070Sjhb%% advise vp U U U 633227070Sjhb 634227070Sjhbvop_advise { 635227070Sjhb IN struct vnode *vp; 636227070Sjhb IN off_t start; 637227070Sjhb IN off_t end; 638227070Sjhb IN int advice; 639227070Sjhb}; 640229728Sjhb 641232317Strociny%% unp_bind vp E E E 642232317Strociny 643232317Strocinyvop_unp_bind { 644232317Strociny IN struct vnode *vp; 645232317Strociny IN struct socket *socket; 646232317Strociny}; 647232317Strociny 648232317Strociny%% unp_connect vp L L L 649232317Strociny 650232317Strocinyvop_unp_connect { 651232317Strociny IN struct vnode *vp; 652232317Strociny OUT struct socket **socket; 653232317Strociny}; 654232317Strociny 655232317Strociny%% unp_detach vp = = = 656232317Strociny 657232317Strocinyvop_unp_detach { 658232317Strociny IN struct vnode *vp; 659232317Strociny}; 660232317Strociny 661241025Skib%% is_text vp L L L 662241025Skib 663241025Skibvop_is_text { 664241025Skib IN struct vnode *vp; 665241025Skib}; 666241025Skib 667241025Skib%% set_text vp E E E 668241025Skib 669241025Skibvop_set_text { 670241025Skib IN struct vnode *vp; 671241025Skib}; 672241025Skib 673241025Skib%% vop_unset_text vp E E E 674241025Skib 675241025Skibvop_unset_text { 676241025Skib IN struct vnode *vp; 677241025Skib}; 678241025Skib 679242476Skib%% get_writecount vp L L L 680242476Skib 681242476Skibvop_get_writecount { 682242476Skib IN struct vnode *vp; 683242476Skib OUT int *writecount; 684242476Skib}; 685242476Skib 686242476Skib%% add_writecount vp E E E 687242476Skib 688242476Skibvop_add_writecount { 689242476Skib IN struct vnode *vp; 690242476Skib IN int inc; 691242476Skib}; 692242476Skib 693229728Sjhb# The VOPs below are spares at the end of the table to allow new VOPs to be 694229728Sjhb# added in stable branches without breaking the KBI. New VOPs in HEAD should 695229728Sjhb# be added above these spares. When merging a new VOP to a stable branch, 696229728Sjhb# the new VOP should replace one of the spares. 697229728Sjhb 698229728Sjhbvop_spare1 { 699229728Sjhb IN struct vnode *vp; 700229728Sjhb}; 701229728Sjhb 702229728Sjhbvop_spare2 { 703229728Sjhb IN struct vnode *vp; 704229728Sjhb}; 705229728Sjhb 706229728Sjhbvop_spare3 { 707229728Sjhb IN struct vnode *vp; 708229728Sjhb}; 709229728Sjhb 710229728Sjhbvop_spare4 { 711229728Sjhb IN struct vnode *vp; 712229728Sjhb}; 713229728Sjhb 714229728Sjhbvop_spare5 { 715229728Sjhb IN struct vnode *vp; 716229728Sjhb}; 717