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