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: releng/11.0/sys/kern/vnode_if.src 298982 2016-05-03 15:17:43Z kib $
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
38298819Spfg# the lock state on input, the "out" column defines the state on successful
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
124298982Skib%! open		post	vop_open_post
125159082Sdds
1261541Srgrimesvop_open {
1271541Srgrimes	IN struct vnode *vp;
1281541Srgrimes	IN int mode;
1291541Srgrimes	IN struct ucred *cred;
13083366Sjulian	IN struct thread *td;
131170152Skib	IN struct file *fp;
1321541Srgrimes};
1331541Srgrimes
134159082Sdds
135189696Sjhb%% close	vp	L L L
136298982Skib%! close	post	vop_close_post
137159082Sdds
1381541Srgrimesvop_close {
1391541Srgrimes	IN struct vnode *vp;
1401541Srgrimes	IN int fflag;
1411541Srgrimes	IN struct ucred *cred;
14283366Sjulian	IN struct thread *td;
1431541Srgrimes};
1441541Srgrimes
145159082Sdds
146159082Sdds%% access	vp	L L L
147159082Sdds
1481541Srgrimesvop_access {
1491541Srgrimes	IN struct vnode *vp;
150184413Strasz	IN accmode_t accmode;
1511541Srgrimes	IN struct ucred *cred;
15283366Sjulian	IN struct thread *td;
1531541Srgrimes};
1541541Srgrimes
155159082Sdds
156193092Strasz%% accessx	vp	L L L
157193092Strasz
158193092Straszvop_accessx {
159193092Strasz	IN struct vnode *vp;
160193092Strasz	IN accmode_t accmode;
161193092Strasz	IN struct ucred *cred;
162193092Strasz	IN struct thread *td;
163193092Strasz};
164193092Strasz
165193092Strasz
166159082Sdds%% getattr	vp	L L L
167159082Sdds
1681541Srgrimesvop_getattr {
1691541Srgrimes	IN struct vnode *vp;
17054803Srwatson	OUT struct vattr *vap;
1711541Srgrimes	IN struct ucred *cred;
1721541Srgrimes};
1731541Srgrimes
174159082Sdds
175159082Sdds%% setattr	vp	E E E
176159082Sdds%! setattr	post	vop_setattr_post
177159082Sdds
1781541Srgrimesvop_setattr {
1791541Srgrimes	IN struct vnode *vp;
1801541Srgrimes	IN struct vattr *vap;
1811541Srgrimes	IN struct ucred *cred;
1821541Srgrimes};
1831541Srgrimes
184187526Sjhb%% markatime	vp	L L L
185159082Sdds
186187526Sjhbvop_markatime {
187187526Sjhb	IN struct vnode *vp;
188187526Sjhb};
189187526Sjhb
190159082Sdds%% read		vp	L L L
191298982Skib%! read		post	vop_read_post
192159082Sdds
1931541Srgrimesvop_read {
1941541Srgrimes	IN struct vnode *vp;
1951541Srgrimes	INOUT struct uio *uio;
1961541Srgrimes	IN int ioflag;
1971541Srgrimes	IN struct ucred *cred;
1981541Srgrimes};
1991541Srgrimes
200159082Sdds
201193762Sps%% write	vp	L L L
202159082Sdds%! write	pre	VOP_WRITE_PRE
203159082Sdds%! write	post	VOP_WRITE_POST
204159082Sdds
2051541Srgrimesvop_write {
2061541Srgrimes	IN struct vnode *vp;
2071541Srgrimes	INOUT struct uio *uio;
2081541Srgrimes	IN int ioflag;
2091541Srgrimes	IN struct ucred *cred;
2101541Srgrimes};
2111541Srgrimes
212159082Sdds
213159082Sdds%% ioctl	vp	U U U
214159082Sdds
2151541Srgrimesvop_ioctl {
2161541Srgrimes	IN struct vnode *vp;
21722521Sdyson	IN u_long command;
218153400Sdes	IN void *data;
2191541Srgrimes	IN int fflag;
2201541Srgrimes	IN struct ucred *cred;
22183366Sjulian	IN struct thread *td;
2221541Srgrimes};
2231541Srgrimes
224159082Sdds
225184377Sjhb%% poll		vp	U U U
226159082Sdds
22729353Spetervop_poll {
2281541Srgrimes	IN struct vnode *vp;
22929353Speter	IN int events;
2301541Srgrimes	IN struct ucred *cred;
23183366Sjulian	IN struct thread *td;
2321541Srgrimes};
2331541Srgrimes
234159082Sdds
235159082Sdds%% kqfilter	vp	U U U
236159082Sdds
23772521Sjlemonvop_kqfilter {
23872521Sjlemon	IN struct vnode *vp;
23972521Sjlemon	IN struct knote *kn;
24072521Sjlemon};
24172521Sjlemon
242159082Sdds
243159082Sdds%% revoke	vp	L L L
244159082Sdds
24522521Sdysonvop_revoke {
24622521Sdyson	IN struct vnode *vp;
24722521Sdyson	IN int flags;
24822521Sdyson};
24922521Sdyson
250159082Sdds
251194019Sps%% fsync	vp	L L L
252159082Sdds
2531541Srgrimesvop_fsync {
2541541Srgrimes	IN struct vnode *vp;
2551541Srgrimes	IN int waitfor;
25683366Sjulian	IN struct thread *td;
2571541Srgrimes};
2581541Srgrimes
259159082Sdds
260159082Sdds%% remove	dvp	E E E
261159082Sdds%% remove	vp	E E E
262159082Sdds%! remove	post	vop_remove_post
263159082Sdds
2641541Srgrimesvop_remove {
26535823Smsmith	IN struct vnode *dvp;
26635823Smsmith	IN struct vnode *vp;
2671541Srgrimes	IN struct componentname *cnp;
2681541Srgrimes};
2691541Srgrimes
270159082Sdds
271159082Sdds%% link		tdvp	E E E
272159082Sdds%% link		vp	E E E
273159082Sdds%! link		post	vop_link_post
274159082Sdds
2759842Sdgvop_link {
27635823Smsmith	IN struct vnode *tdvp;
2779842Sdg	IN struct vnode *vp;
2789842Sdg	IN struct componentname *cnp;
2799842Sdg};
2801541Srgrimes
281159082Sdds
282159082Sdds%! rename	pre	vop_rename_pre
283159082Sdds%! rename	post	vop_rename_post
284159082Sdds
2851541Srgrimesvop_rename {
2861541Srgrimes	IN WILLRELE struct vnode *fdvp;
2871541Srgrimes	IN WILLRELE struct vnode *fvp;
2881541Srgrimes	IN struct componentname *fcnp;
2891541Srgrimes	IN WILLRELE struct vnode *tdvp;
2901541Srgrimes	IN WILLRELE struct vnode *tvp;
2911541Srgrimes	IN struct componentname *tcnp;
2921541Srgrimes};
2931541Srgrimes
294159082Sdds
295159082Sdds%% mkdir	dvp	E E E
296159082Sdds%% mkdir	vpp	- E -
297159082Sdds%! mkdir	post	vop_mkdir_post
298159082Sdds
2991541Srgrimesvop_mkdir {
30035823Smsmith	IN struct vnode *dvp;
3011541Srgrimes	OUT struct vnode **vpp;
3021541Srgrimes	IN struct componentname *cnp;
3031541Srgrimes	IN struct vattr *vap;
3041541Srgrimes};
3051541Srgrimes
306159082Sdds
307159082Sdds%% rmdir	dvp	E E E
308159082Sdds%% rmdir	vp	E E E
309159082Sdds%! rmdir	post	vop_rmdir_post
310159082Sdds
3111541Srgrimesvop_rmdir {
31235823Smsmith	IN struct vnode *dvp;
31335823Smsmith	IN struct vnode *vp;
3141541Srgrimes	IN struct componentname *cnp;
3151541Srgrimes};
3161541Srgrimes
317159082Sdds
318159082Sdds%% symlink	dvp	E E E
319159082Sdds%% symlink	vpp	- E -
320159082Sdds%! symlink	post	vop_symlink_post
321159082Sdds
3221541Srgrimesvop_symlink {
32335823Smsmith	IN struct vnode *dvp;
32453131Seivind	OUT struct vnode **vpp;
3251541Srgrimes	IN struct componentname *cnp;
3261541Srgrimes	IN struct vattr *vap;
3271541Srgrimes	IN char *target;
3281541Srgrimes};
3291541Srgrimes
330159082Sdds
331159082Sdds%% readdir	vp	L L L
332298982Skib%! readdir	post	vop_readdir_post
333159082Sdds
3341541Srgrimesvop_readdir {
3351541Srgrimes	IN struct vnode *vp;
3361541Srgrimes	INOUT struct uio *uio;
3371541Srgrimes	IN struct ucred *cred;
3383167Sdfr	INOUT int *eofflag;
33922521Sdyson	OUT int *ncookies;
34022521Sdyson	INOUT u_long **cookies;
3411541Srgrimes};
3421541Srgrimes
343159082Sdds
344159082Sdds%% readlink	vp	L L L
345159082Sdds
3461541Srgrimesvop_readlink {
3471541Srgrimes	IN struct vnode *vp;
3481541Srgrimes	INOUT struct uio *uio;
3491541Srgrimes	IN struct ucred *cred;
3501541Srgrimes};
3511541Srgrimes
352159082Sdds
353159082Sdds%% inactive	vp	E E E
354159082Sdds
3551541Srgrimesvop_inactive {
3561541Srgrimes	IN struct vnode *vp;
35783366Sjulian	IN struct thread *td;
3581541Srgrimes};
3591541Srgrimes
360159082Sdds
361159082Sdds%% reclaim	vp	E E E
362287831Scem%! reclaim	post	vop_reclaim_post
363159082Sdds
3641541Srgrimesvop_reclaim {
3651541Srgrimes	IN struct vnode *vp;
36683366Sjulian	IN struct thread *td;
3671541Srgrimes};
3681541Srgrimes
369159082Sdds
370169671Skib%! lock1	pre	vop_lock_pre
371169671Skib%! lock1	post	vop_lock_post
372159082Sdds
373169671Skibvop_lock1 {
3741541Srgrimes	IN struct vnode *vp;
37522521Sdyson	IN int flags;
376164248Skmacy	IN char *file;
377164248Skmacy	IN int line;
3781541Srgrimes};
3791541Srgrimes
380159082Sdds
381159082Sdds%! unlock	pre	vop_unlock_pre
382159082Sdds%! unlock	post	vop_unlock_post
383159082Sdds
3841541Srgrimesvop_unlock {
3851541Srgrimes	IN struct vnode *vp;
38622521Sdyson	IN int flags;
3871541Srgrimes};
3881541Srgrimes
389159082Sdds
390159082Sdds%% bmap		vp	L L L
391159082Sdds
3921541Srgrimesvop_bmap {
3931541Srgrimes	IN struct vnode *vp;
39496572Sphk	IN daddr_t bn;
395137726Sphk	OUT struct bufobj **bop;
39696572Sphk	IN daddr_t *bnp;
3971541Srgrimes	OUT int *runp;
39810551Sdyson	OUT int *runb;
3991541Srgrimes};
4001541Srgrimes
401159082Sdds
402159082Sdds%% strategy	vp	L L L
403159082Sdds%! strategy	pre	vop_strategy_pre
404159082Sdds
40537384Sjulianvop_strategy {
40637384Sjulian	IN struct vnode *vp;
40737384Sjulian	IN struct buf *bp;
40837384Sjulian};
4091541Srgrimes
410159082Sdds
411159082Sdds%% getwritemount vp	= = =
412159082Sdds
41362976Smckusickvop_getwritemount {
41462976Smckusick	IN struct vnode *vp;
41562976Smckusick	OUT struct mount **mpp;
41662976Smckusick};
41762976Smckusick
418159082Sdds
419176590Skib%% print	vp	- - -
420159082Sdds
4211541Srgrimesvop_print {
4221541Srgrimes	IN struct vnode *vp;
4231541Srgrimes};
4241541Srgrimes
425159082Sdds
426159082Sdds%% pathconf	vp	L L L
427159082Sdds
4281541Srgrimesvop_pathconf {
4291541Srgrimes	IN struct vnode *vp;
4301541Srgrimes	IN int name;
43122521Sdyson	OUT register_t *retval;
4321541Srgrimes};
4331541Srgrimes
434159082Sdds
435159082Sdds%% advlock	vp	U U U
436159082Sdds
4371541Srgrimesvop_advlock {
4381541Srgrimes	IN struct vnode *vp;
439153400Sdes	IN void *id;
4401541Srgrimes	IN int op;
4411541Srgrimes	IN struct flock *fl;
4421541Srgrimes	IN int flags;
4431541Srgrimes};
4441541Srgrimes
445159082Sdds
446177633Sdfr%% advlockasync	vp	U U U
447177633Sdfr
448177633Sdfrvop_advlockasync {
449177633Sdfr	IN struct vnode *vp;
450177633Sdfr	IN void *id;
451177633Sdfr	IN int op;
452177633Sdfr	IN struct flock *fl;
453177633Sdfr	IN int flags;
454177633Sdfr	IN struct task *task;	
455177633Sdfr	INOUT void **cookiep;
456177633Sdfr};
457177633Sdfr
458177633Sdfr
459208003Szml%% advlockpurge	vp	E E E
460208003Szml
461208003Szmlvop_advlockpurge {
462208003Szml	IN struct vnode *vp;
463208003Szml};
464208003Szml
465208003Szml
466159082Sdds%% reallocblks	vp	E E E
467159082Sdds
4681541Srgrimesvop_reallocblks {
4691541Srgrimes	IN struct vnode *vp;
4701541Srgrimes	IN struct cluster_save *buflist;
4711541Srgrimes};
4721541Srgrimes
473159082Sdds
474159082Sdds%% getpages	vp	L L L
475159082Sdds
47610551Sdysonvop_getpages {
47710551Sdyson	IN struct vnode *vp;
47810551Sdyson	IN vm_page_t *m;
47910551Sdyson	IN int count;
480292373Sglebius	IN int *rbehind;
481292373Sglebius	IN int *rahead;
48210551Sdyson};
48310551Sdyson
484159082Sdds
485274914Sglebius%% getpages_async	vp	L L L
486274914Sglebius
487274914Sglebiusvop_getpages_async {
488274914Sglebius	IN struct vnode *vp;
489274914Sglebius	IN vm_page_t *m;
490274914Sglebius	IN int count;
491292373Sglebius	IN int *rbehind;
492292373Sglebius	IN int *rahead;
493274914Sglebius	IN vop_getpages_iodone_t *iodone;
494274914Sglebius	IN void *arg;
495274914Sglebius};
496274914Sglebius
497274914Sglebius
498257899Skib%% putpages	vp	L L L
499159082Sdds
50010551Sdysonvop_putpages {
50110551Sdyson	IN struct vnode *vp;
50210551Sdyson	IN vm_page_t *m;
50310551Sdyson	IN int count;
50410551Sdyson	IN int sync;
50510551Sdyson	IN int *rtvals;
50610551Sdyson};
50711704Sdyson
508159082Sdds
509159082Sdds%% getacl	vp	L L L
510159082Sdds
51154803Srwatsonvop_getacl {
51254803Srwatson	IN struct vnode *vp;
51354803Srwatson	IN acl_type_t type;
51454803Srwatson	OUT struct acl *aclp;
51554803Srwatson	IN struct ucred *cred;
51683366Sjulian	IN struct thread *td;
51754803Srwatson};
51854803Srwatson
519159082Sdds
520159082Sdds%% setacl	vp	E E E
521159082Sdds
52254803Srwatsonvop_setacl {
52354803Srwatson	IN struct vnode *vp;
52454803Srwatson	IN acl_type_t type;
52554803Srwatson	IN struct acl *aclp;
52654803Srwatson	IN struct ucred *cred;
52783366Sjulian	IN struct thread *td;
52854803Srwatson};
52954803Srwatson
530159082Sdds
531159082Sdds%% aclcheck	vp	= = =
532159082Sdds
53354803Srwatsonvop_aclcheck {
53454803Srwatson	IN struct vnode *vp;
53554803Srwatson	IN acl_type_t type;
53654803Srwatson	IN struct acl *aclp;
53754803Srwatson	IN struct ucred *cred;
53883366Sjulian	IN struct thread *td;
53954803Srwatson};
54054803Srwatson
541159082Sdds
542159082Sdds%% closeextattr	vp	L L L
543159082Sdds
544102990Sphkvop_closeextattr {
545102990Sphk	IN struct vnode *vp;
546102990Sphk	IN int commit;
547102990Sphk	IN struct ucred *cred;
548102990Sphk	IN struct thread *td;
549102990Sphk};
550102990Sphk
551159082Sdds
552159082Sdds%% getextattr	vp	L L L
553159082Sdds
55454803Srwatsonvop_getextattr {
55554803Srwatson	IN struct vnode *vp;
55674437Srwatson	IN int attrnamespace;
55765119Srwatson	IN const char *name;
55854803Srwatson	INOUT struct uio *uio;
55990448Srwatson	OUT size_t *size;
56054803Srwatson	IN struct ucred *cred;
56183366Sjulian	IN struct thread *td;
56254803Srwatson};
56354803Srwatson
564159082Sdds
565159082Sdds%% listextattr	vp	L L L
566159082Sdds
567115867Srwatsonvop_listextattr {
568115867Srwatson	IN struct vnode *vp;
569115867Srwatson	IN int attrnamespace;
570115867Srwatson	INOUT struct uio *uio;
571115867Srwatson	OUT size_t *size;
572115867Srwatson	IN struct ucred *cred;
573115867Srwatson	IN struct thread *td;
574115867Srwatson};
575115867Srwatson
576159082Sdds
577159082Sdds%% openextattr	vp	L L L
578159082Sdds
579102990Sphkvop_openextattr {
580102990Sphk	IN struct vnode *vp;
581102990Sphk	IN struct ucred *cred;
582102990Sphk	IN struct thread *td;
583102990Sphk};
584102990Sphk
585159082Sdds
586159082Sdds%% deleteextattr	vp	E E E
587228849Sjhb%! deleteextattr	post	vop_deleteextattr_post
588159082Sdds
589118131Srwatsonvop_deleteextattr {
590116698Srwatson	IN struct vnode *vp;
591116698Srwatson	IN int attrnamespace;
592116698Srwatson	IN const char *name;
593116698Srwatson	IN struct ucred *cred;
594116698Srwatson	IN struct thread *td;
595116698Srwatson};
596116698Srwatson
597159082Sdds
598159082Sdds%% setextattr	vp	E E E
599228849Sjhb%! setextattr	post	vop_setextattr_post
600159082Sdds
60154803Srwatsonvop_setextattr {
60254803Srwatson	IN struct vnode *vp;
60374437Srwatson	IN int attrnamespace;
60465119Srwatson	IN const char *name;
60554803Srwatson	INOUT struct uio *uio;
60654803Srwatson	IN struct ucred *cred;
60783366Sjulian	IN struct thread *td;
60854803Srwatson};
60965770Sbp
610159082Sdds
611159082Sdds%% setlabel	vp	E E E
612159082Sdds
613100984Srwatsonvop_setlabel {
614100984Srwatson	IN struct vnode *vp;
615100984Srwatson	IN struct label *label;
616100984Srwatson	IN struct ucred *cred;
617100984Srwatson	IN struct thread *td;
618100984Srwatson};
619166774Spjd
620166774Spjd
621184377Sjhb%% vptofh	vp	= = =
622166774Spjd
623166774Spjdvop_vptofh {
624166774Spjd	IN struct vnode *vp;
625166774Spjd	IN struct fid *fhp;
626166774Spjd};
627185956Smarcus
628220791Smdf
629185956Smarcus%% vptocnp		vp	L L L
630185956Smarcus%% vptocnp		vpp	- U -
631185956Smarcus
632185956Smarcusvop_vptocnp {
633185956Smarcus	IN struct vnode *vp;
634185956Smarcus	OUT struct vnode **vpp;
635194601Skib	IN struct ucred *cred;
636185956Smarcus	INOUT char *buf;
637185956Smarcus	INOUT int *buflen;
638185956Smarcus};
639220791Smdf
640220791Smdf
641220846Smdf%% allocate	vp	E E E
642220791Smdf
643220791Smdfvop_allocate {
644220791Smdf	IN struct vnode *vp;
645221836Smdf	INOUT off_t *offset;
646221836Smdf	INOUT off_t *len;
647220791Smdf};
648227070Sjhb
649227070Sjhb%% advise	vp	U U U
650227070Sjhb
651227070Sjhbvop_advise {
652227070Sjhb	IN struct vnode *vp;
653227070Sjhb	IN off_t start;
654227070Sjhb	IN off_t end;
655227070Sjhb	IN int advice;
656227070Sjhb};
657229728Sjhb
658232317Strociny%% unp_bind	vp	E E E
659232317Strociny
660232317Strocinyvop_unp_bind {
661232317Strociny	IN struct vnode *vp;
662232317Strociny	IN struct socket *socket;
663232317Strociny};
664232317Strociny
665232317Strociny%% unp_connect	vp	L L L
666232317Strociny
667232317Strocinyvop_unp_connect {
668232317Strociny	IN struct vnode *vp;
669232317Strociny	OUT struct socket **socket;
670232317Strociny};
671232317Strociny
672232317Strociny%% unp_detach	vp	= = =
673232317Strociny
674232317Strocinyvop_unp_detach {
675232317Strociny	IN struct vnode *vp;
676232317Strociny};
677232317Strociny
678241025Skib%% is_text	vp	L L L
679241025Skib
680241025Skibvop_is_text {
681241025Skib	IN struct vnode *vp;
682241025Skib};
683241025Skib
684241025Skib%% set_text	vp	E E E
685241025Skib
686241025Skibvop_set_text {
687241025Skib	IN struct vnode *vp;
688241025Skib};
689241025Skib
690241025Skib%% vop_unset_text	vp	E E E
691241025Skib
692241025Skibvop_unset_text {
693241025Skib	IN struct vnode *vp;
694241025Skib};
695241025Skib
696242476Skib%% get_writecount	vp	L L L
697242476Skib
698242476Skibvop_get_writecount {
699242476Skib	IN struct vnode *vp;
700242476Skib	OUT int *writecount;
701242476Skib};
702242476Skib
703242476Skib%% add_writecount	vp	E E E
704242476Skib
705242476Skibvop_add_writecount {
706242476Skib	IN struct vnode *vp;
707242476Skib	IN int inc;
708242476Skib};
709242476Skib
710229728Sjhb# The VOPs below are spares at the end of the table to allow new VOPs to be
711229728Sjhb# added in stable branches without breaking the KBI.  New VOPs in HEAD should
712229728Sjhb# be added above these spares.  When merging a new VOP to a stable branch,
713229728Sjhb# the new VOP should replace one of the spares.
714229728Sjhb
715229728Sjhbvop_spare1 {
716229728Sjhb	IN struct vnode *vp;
717229728Sjhb};
718229728Sjhb
719229728Sjhbvop_spare2 {
720229728Sjhb	IN struct vnode *vp;
721229728Sjhb};
722229728Sjhb
723229728Sjhbvop_spare3 {
724229728Sjhb	IN struct vnode *vp;
725229728Sjhb};
726229728Sjhb
727229728Sjhbvop_spare4 {
728229728Sjhb	IN struct vnode *vp;
729229728Sjhb};
730229728Sjhb
731229728Sjhbvop_spare5 {
732229728Sjhb	IN struct vnode *vp;
733229728Sjhb};
734