vnode_if.src revision 232317
1110655Snectar#-
2110655Snectar# Copyright (c) 1992, 1993
3110655Snectar#	The Regents of the University of California.  All rights reserved.
4110655Snectar#
5110655Snectar# Redistribution and use in source and binary forms, with or without
6110655Snectar# modification, are permitted provided that the following conditions
7290207Sjkim# are met:
8160819Ssimon# 1. Redistributions of source code must retain the above copyright
9110655Snectar#    notice, this list of conditions and the following disclaimer.
10110655Snectar# 2. Redistributions in binary form must reproduce the above copyright
11110655Snectar#    notice, this list of conditions and the following disclaimer in the
12110655Snectar#    documentation and/or other materials provided with the distribution.
13110655Snectar# 4. Neither the name of the University nor the names of its contributors
14110655Snectar#    may be used to endorse or promote products derived from this software
15110655Snectar#    without specific prior written permission.
16110655Snectar#
17110655Snectar# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18238405Sjkim# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19110655Snectar# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20110655Snectar# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21110655Snectar# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22110655Snectar# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23110655Snectar# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24110655Snectar# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25110655Snectar# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26110655Snectar# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27110655Snectar# SUCH DAMAGE.
28110655Snectar#
29110655Snectar#	@(#)vnode_if.src	8.12 (Berkeley) 5/14/95
30110655Snectar# $FreeBSD: head/sys/kern/vnode_if.src 232317 2012-02-29 21:38:31Z trociny $
31160819Ssimon#
32110655Snectar
33110655Snectar#
34110655Snectar# Above each of the vop descriptors in lines starting with %%
35110655Snectar# is a specification of the locking protocol used by each vop call.
36110655Snectar# The first column is the name of the variable, the remaining three
37110655Snectar# columns are in, out and error respectively.  The "in" column defines
38110655Snectar# the lock state on input, the "out" column defines the state on succesful
39110655Snectar# return, and the "error" column defines the locking state on error exit.
40110655Snectar#
41110655Snectar# The locking value can take the following values:
42110655Snectar# L: locked; not converted to type of lock.
43110655Snectar# A: any lock type.
44110655Snectar# S: locked with shared lock.
45110655Snectar# E: locked with exclusive lock for this process.
46110655Snectar# O: locked with exclusive lock for other process.
47110655Snectar# U: unlocked.
48110655Snectar# -: not applicable.  vnode does not yet (or no longer) exists.
49238405Sjkim# =: the same on input and output, may be either L or U.
50238405Sjkim# X: locked if not nil.
51273144Sjkim#
52238405Sjkim# The paramater named "vpp" is assumed to be always used with double
53238405Sjkim# indirection (**vpp) and that name is hard-coded in vnode_if.awk !
54238405Sjkim#
55238405Sjkim# Lines starting with %! specify a pre or post-condition function
56238405Sjkim# to call before/after the vop call.
57238405Sjkim#
58238405Sjkim# If other such parameters are introduced, they have to be added to
59238405Sjkim# the AWK script at the head of the definition of "add_debug_code()".
60238405Sjkim#
61238405Sjkim
62238405Sjkimvop_islocked {
63238405Sjkim	IN struct vnode *vp;
64238405Sjkim};
65127131Snectar
66127131Snectar%% lookup	dvp	L ? ?
67110655Snectar%% lookup	vpp	- L -
68110655Snectar%! lookup	pre	vop_lookup_pre
69110655Snectar%! lookup	post	vop_lookup_post
70110655Snectar
71110655Snectar# XXX - the lookup locking protocol defies simple description and depends
72110655Snectar#	on the flags and operation fields in the (cnp) structure.  Note
73110655Snectar#	especially that *vpp may equal dvp and both may be locked.
74110655Snectar
75110655Snectarvop_lookup {
76110655Snectar	IN struct vnode *dvp;
77110655Snectar	INOUT struct vnode **vpp;
78110655Snectar	IN struct componentname *cnp;
79110655Snectar};
80110655Snectar
81110655Snectar%% cachedlookup	dvp	L ? ?
82110655Snectar%% cachedlookup	vpp	- L -
83110655Snectar
84290207Sjkim# This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
85290207Sjkim
86290207Sjkimvop_cachedlookup {
87290207Sjkim	IN struct vnode *dvp;
88290207Sjkim	INOUT struct vnode **vpp;
89290207Sjkim	IN struct componentname *cnp;
90110655Snectar};
91110655Snectar
92110655Snectar%% create	dvp	E E E
93110655Snectar%% create	vpp	- L -
94110655Snectar%! create	post	vop_create_post
95110655Snectar
96110655Snectarvop_create {
97110655Snectar	IN struct vnode *dvp;
98110655Snectar	OUT struct vnode **vpp;
99160819Ssimon	IN struct componentname *cnp;
100110655Snectar	IN struct vattr *vap;
101110655Snectar};
102238405Sjkim
103238405Sjkim
104298998Sjkim%% whiteout	dvp	E E E
105110655Snectar
106110655Snectarvop_whiteout {
107238405Sjkim	IN struct vnode *dvp;
108238405Sjkim	IN struct componentname *cnp;
109238405Sjkim	IN int flags;
110238405Sjkim};
111238405Sjkim
112238405Sjkim
113238405Sjkim%% mknod	dvp	E E E
114238405Sjkim%% mknod	vpp	- L -
115325337Sjkim%! mknod	post	vop_mknod_post
116110655Snectar
117238405Sjkimvop_mknod {
118110655Snectar	IN struct vnode *dvp;
119238405Sjkim	OUT struct vnode **vpp;
120238405Sjkim	IN struct componentname *cnp;
121246772Sjkim	IN struct vattr *vap;
122110655Snectar};
123110655Snectar
124110655Snectar
125110655Snectar%% open		vp	L L L
126160819Ssimon
127110655Snectarvop_open {
128127131Snectar	IN struct vnode *vp;
129160819Ssimon	IN int mode;
130290207Sjkim	IN struct ucred *cred;
131127131Snectar	IN struct thread *td;
132110655Snectar	IN struct file *fp;
133238405Sjkim};
134238405Sjkim
135110655Snectar
136110655Snectar%% close	vp	L L L
137110655Snectar
138110655Snectarvop_close {
139110655Snectar	IN struct vnode *vp;
140238405Sjkim	IN int fflag;
141110655Snectar	IN struct ucred *cred;
142110655Snectar	IN struct thread *td;
143110655Snectar};
144110655Snectar
145110655Snectar
146110655Snectar%% access	vp	L L L
147110655Snectar
148110655Snectarvop_access {
149110655Snectar	IN struct vnode *vp;
150110655Snectar	IN accmode_t accmode;
151110655Snectar	IN struct ucred *cred;
152110655Snectar	IN struct thread *td;
153110655Snectar};
154110655Snectar
155110655Snectar
156110655Snectar%% accessx	vp	L L L
157110655Snectar
158110655Snectarvop_accessx {
159110655Snectar	IN struct vnode *vp;
160110655Snectar	IN accmode_t accmode;
161238405Sjkim	IN struct ucred *cred;
162110655Snectar	IN struct thread *td;
163238405Sjkim};
164110655Snectar
165110655Snectar
166110655Snectar%% getattr	vp	L L L
167110655Snectar
168110655Snectarvop_getattr {
169238405Sjkim	IN struct vnode *vp;
170238405Sjkim	OUT struct vattr *vap;
171238405Sjkim	IN struct ucred *cred;
172238405Sjkim};
173238405Sjkim
174238405Sjkim
175290207Sjkim%% setattr	vp	E E E
176325337Sjkim%! setattr	post	vop_setattr_post
177337982Sjkim
178110655Snectarvop_setattr {
179238405Sjkim	IN struct vnode *vp;
180110655Snectar	IN struct vattr *vap;
181110655Snectar	IN struct ucred *cred;
182110655Snectar};
183110655Snectar
184110655Snectar%% markatime	vp	L L L
185110655Snectar
186110655Snectarvop_markatime {
187280297Sjkim	IN struct vnode *vp;
188110655Snectar};
189110655Snectar
190290207Sjkim%% read		vp	L L L
191280297Sjkim
192110655Snectarvop_read {
193306195Sjkim	IN struct vnode *vp;
194110655Snectar	INOUT struct uio *uio;
195110655Snectar	IN int ioflag;
196110655Snectar	IN struct ucred *cred;
197110655Snectar};
198110655Snectar
199110655Snectar
200110655Snectar%% write	vp	L L L
201110655Snectar%! write	pre	VOP_WRITE_PRE
202110655Snectar%! write	post	VOP_WRITE_POST
203110655Snectar
204290207Sjkimvop_write {
205160819Ssimon	IN struct vnode *vp;
206110655Snectar	INOUT struct uio *uio;
207110655Snectar	IN int ioflag;
208110655Snectar	IN struct ucred *cred;
209110655Snectar};
210238405Sjkim
211238405Sjkim
212110655Snectar%% ioctl	vp	U U U
213110655Snectar
214110655Snectarvop_ioctl {
215110655Snectar	IN struct vnode *vp;
216110655Snectar	IN u_long command;
217110655Snectar	IN void *data;
218110655Snectar	IN int fflag;
219110655Snectar	IN struct ucred *cred;
220110655Snectar	IN struct thread *td;
221110655Snectar};
222110655Snectar
223110655Snectar
224110655Snectar%% poll		vp	U U U
225160819Ssimon
226110655Snectarvop_poll {
227325335Sjkim	IN struct vnode *vp;
228325335Sjkim	IN int events;
229110655Snectar	IN struct ucred *cred;
230325335Sjkim	IN struct thread *td;
231110655Snectar};
232325335Sjkim
233110655Snectar
234325335Sjkim%% kqfilter	vp	U U U
235110655Snectar
236325335Sjkimvop_kqfilter {
237110655Snectar	IN struct vnode *vp;
238290207Sjkim	IN struct knote *kn;
239290207Sjkim};
240325335Sjkim
241325335Sjkim
242290207Sjkim%% revoke	vp	L L L
243160819Ssimon
244110655Snectarvop_revoke {
245325335Sjkim	IN struct vnode *vp;
246325335Sjkim	IN int flags;
247325335Sjkim};
248325335Sjkim
249325335Sjkim
250325335Sjkim%% fsync	vp	L L L
251325335Sjkim
252325335Sjkimvop_fsync {
253110655Snectar	IN struct vnode *vp;
254110655Snectar	IN int waitfor;
255110655Snectar	IN struct thread *td;
256325335Sjkim};
257325335Sjkim
258110655Snectar
259110655Snectar%% remove	dvp	E E E
260325335Sjkim%% remove	vp	E E E
261325335Sjkim%! remove	post	vop_remove_post
262110655Snectar
263110655Snectarvop_remove {
264110655Snectar	IN struct vnode *dvp;
265325335Sjkim	IN struct vnode *vp;
266325335Sjkim	IN struct componentname *cnp;
267325335Sjkim};
268325335Sjkim
269325335Sjkim
270325335Sjkim%% link		tdvp	E E E
271110655Snectar%% link		vp	E E E
272110655Snectar%! link		post	vop_link_post
273110655Snectar
274110655Snectarvop_link {
275110655Snectar	IN struct vnode *tdvp;
276110655Snectar	IN struct vnode *vp;
277325335Sjkim	IN struct componentname *cnp;
278110655Snectar};
279325335Sjkim
280325335Sjkim
281110655Snectar%! rename	pre	vop_rename_pre
282110655Snectar%! rename	post	vop_rename_post
283110655Snectar
284110655Snectarvop_rename {
285110655Snectar	IN WILLRELE struct vnode *fdvp;
286325335Sjkim	IN WILLRELE struct vnode *fvp;
287325335Sjkim	IN struct componentname *fcnp;
288110655Snectar	IN WILLRELE struct vnode *tdvp;
289325335Sjkim	IN WILLRELE struct vnode *tvp;
290290207Sjkim	IN struct componentname *tcnp;
291110655Snectar};
292325335Sjkim
293110655Snectar
294325335Sjkim%% mkdir	dvp	E E E
295325335Sjkim%% mkdir	vpp	- E -
296325335Sjkim%! mkdir	post	vop_mkdir_post
297325335Sjkim
298110655Snectarvop_mkdir {
299325335Sjkim	IN struct vnode *dvp;
300110655Snectar	OUT struct vnode **vpp;
301325335Sjkim	IN struct componentname *cnp;
302325335Sjkim	IN struct vattr *vap;
303110655Snectar};
304325335Sjkim
305325335Sjkim
306325335Sjkim%% rmdir	dvp	E E E
307325335Sjkim%% rmdir	vp	E E E
308325335Sjkim%! rmdir	post	vop_rmdir_post
309325335Sjkim
310325335Sjkimvop_rmdir {
311290207Sjkim	IN struct vnode *dvp;
312110655Snectar	IN struct vnode *vp;
313325335Sjkim	IN struct componentname *cnp;
314325335Sjkim};
315110655Snectar
316110655Snectar
317110655Snectar%% symlink	dvp	E E E
318110655Snectar%% symlink	vpp	- E -
319325335Sjkim%! symlink	post	vop_symlink_post
320325335Sjkim
321325335Sjkimvop_symlink {
322110655Snectar	IN struct vnode *dvp;
323110655Snectar	OUT struct vnode **vpp;
324325335Sjkim	IN struct componentname *cnp;
325325335Sjkim	IN struct vattr *vap;
326110655Snectar	IN char *target;
327110655Snectar};
328110655Snectar
329110655Snectar
330110655Snectar%% readdir	vp	L L L
331325335Sjkim
332325335Sjkimvop_readdir {
333110655Snectar	IN struct vnode *vp;
334325335Sjkim	INOUT struct uio *uio;
335110655Snectar	IN struct ucred *cred;
336325335Sjkim	INOUT int *eofflag;
337110655Snectar	OUT int *ncookies;
338325335Sjkim	INOUT u_long **cookies;
339325335Sjkim};
340325335Sjkim
341325335Sjkim
342110655Snectar%% readlink	vp	L L L
343110655Snectar
344325335Sjkimvop_readlink {
345325335Sjkim	IN struct vnode *vp;
346325335Sjkim	INOUT struct uio *uio;
347160819Ssimon	IN struct ucred *cred;
348325335Sjkim};
349325335Sjkim
350160819Ssimon
351160819Ssimon%% inactive	vp	E E E
352325335Sjkim
353160819Ssimonvop_inactive {
354290207Sjkim	IN struct vnode *vp;
355325335Sjkim	IN struct thread *td;
356325335Sjkim};
357110655Snectar
358325335Sjkim
359110655Snectar%% reclaim	vp	E E E
360110655Snectar
361325335Sjkimvop_reclaim {
362325335Sjkim	IN struct vnode *vp;
363110655Snectar	IN struct thread *td;
364110655Snectar};
365325335Sjkim
366110655Snectar
367110655Snectar%! lock1	pre	vop_lock_pre
368325335Sjkim%! lock1	post	vop_lock_post
369325335Sjkim
370325335Sjkimvop_lock1 {
371325335Sjkim	IN struct vnode *vp;
372325335Sjkim	IN int flags;
373110655Snectar	IN char *file;
374110655Snectar	IN int line;
375325335Sjkim};
376325335Sjkim
377110655Snectar
378325335Sjkim%! unlock	pre	vop_unlock_pre
379110655Snectar%! unlock	post	vop_unlock_post
380325335Sjkim
381325335Sjkimvop_unlock {
382110655Snectar	IN struct vnode *vp;
383325335Sjkim	IN int flags;
384110655Snectar};
385110655Snectar
386325335Sjkim
387110655Snectar%% bmap		vp	L L L
388110655Snectar
389325335Sjkimvop_bmap {
390325335Sjkim	IN struct vnode *vp;
391110655Snectar	IN daddr_t bn;
392290207Sjkim	OUT struct bufobj **bop;
393325335Sjkim	IN daddr_t *bnp;
394290207Sjkim	OUT int *runp;
395325335Sjkim	OUT int *runb;
396110655Snectar};
397325335Sjkim
398110655Snectar
399325335Sjkim%% strategy	vp	L L L
400325335Sjkim%! strategy	pre	vop_strategy_pre
401325335Sjkim
402325335Sjkimvop_strategy {
403110655Snectar	IN struct vnode *vp;
404110655Snectar	IN struct buf *bp;
405110655Snectar};
406110655Snectar
407325335Sjkim
408325335Sjkim%% getwritemount vp	= = =
409110655Snectar
410110655Snectarvop_getwritemount {
411325335Sjkim	IN struct vnode *vp;
412110655Snectar	OUT struct mount **mpp;
413325335Sjkim};
414110655Snectar
415325335Sjkim
416110655Snectar%% print	vp	- - -
417110655Snectar
418110655Snectarvop_print {
419325335Sjkim	IN struct vnode *vp;
420290207Sjkim};
421110655Snectar
422110655Snectar
423110655Snectar%% pathconf	vp	L L L
424110655Snectar
425325335Sjkimvop_pathconf {
426110655Snectar	IN struct vnode *vp;
427110655Snectar	IN int name;
428325335Sjkim	OUT register_t *retval;
429110655Snectar};
430325335Sjkim
431110655Snectar
432325335Sjkim%% advlock	vp	U U U
433238405Sjkim
434325335Sjkimvop_advlock {
435238405Sjkim	IN struct vnode *vp;
436238405Sjkim	IN void *id;
437238405Sjkim	IN int op;
438273144Sjkim	IN struct flock *fl;
439325335Sjkim	IN int flags;
440325335Sjkim};
441238405Sjkim
442238405Sjkim
443325335Sjkim%% advlockasync	vp	U U U
444325335Sjkim
445238405Sjkimvop_advlockasync {
446325335Sjkim	IN struct vnode *vp;
447325335Sjkim	IN void *id;
448325335Sjkim	IN int op;
449325335Sjkim	IN struct flock *fl;
450238405Sjkim	IN int flags;
451290207Sjkim	IN struct task *task;	
452325335Sjkim	INOUT void **cookiep;
453325335Sjkim};
454238405Sjkim
455238405Sjkim
456325335Sjkim%% advlockpurge	vp	E E E
457238405Sjkim
458290207Sjkimvop_advlockpurge {
459167616Ssimon	IN struct vnode *vp;
460127131Snectar};
461127131Snectar
462110655Snectar
463110655Snectar%% reallocblks	vp	E E E
464325335Sjkim
465290207Sjkimvop_reallocblks {
466325335Sjkim	IN struct vnode *vp;
467110655Snectar	IN struct cluster_save *buflist;
468110655Snectar};
469325335Sjkim
470110655Snectar
471110655Snectar%% getpages	vp	L L L
472325335Sjkim
473110655Snectarvop_getpages {
474110655Snectar	IN struct vnode *vp;
475290207Sjkim	IN vm_page_t *m;
476325335Sjkim	IN int count;
477110655Snectar	IN int reqpage;
478110655Snectar	IN vm_ooffset_t offset;
479325335Sjkim};
480110655Snectar
481110655Snectar
482325335Sjkim%% putpages	vp	E E E
483110655Snectar
484110655Snectarvop_putpages {
485325335Sjkim	IN struct vnode *vp;
486290207Sjkim	IN vm_page_t *m;
487290207Sjkim	IN int count;
488290207Sjkim	IN int sync;
489290207Sjkim	IN int *rtvals;
490290207Sjkim	IN vm_ooffset_t offset;
491290207Sjkim};
492325335Sjkim
493325335Sjkim
494325335Sjkim%% getacl	vp	L L L
495290207Sjkim
496290207Sjkimvop_getacl {
497325335Sjkim	IN struct vnode *vp;
498325335Sjkim	IN acl_type_t type;
499325335Sjkim	OUT struct acl *aclp;
500290207Sjkim	IN struct ucred *cred;
501290207Sjkim	IN struct thread *td;
502325335Sjkim};
503325335Sjkim
504325335Sjkim
505325335Sjkim%% setacl	vp	E E E
506325335Sjkim
507325335Sjkimvop_setacl {
508325335Sjkim	IN struct vnode *vp;
509290207Sjkim	IN acl_type_t type;
510325335Sjkim	IN struct acl *aclp;
511325335Sjkim	IN struct ucred *cred;
512290207Sjkim	IN struct thread *td;
513290207Sjkim};
514325335Sjkim
515290207Sjkim
516325335Sjkim%% aclcheck	vp	= = =
517325335Sjkim
518325335Sjkimvop_aclcheck {
519325335Sjkim	IN struct vnode *vp;
520290207Sjkim	IN acl_type_t type;
521325335Sjkim	IN struct acl *aclp;
522290207Sjkim	IN struct ucred *cred;
523290207Sjkim	IN struct thread *td;
524325335Sjkim};
525290207Sjkim
526290207Sjkim
527290207Sjkim%% closeextattr	vp	L L L
528325335Sjkim
529325335Sjkimvop_closeextattr {
530290207Sjkim	IN struct vnode *vp;
531290207Sjkim	IN int commit;
532290207Sjkim	IN struct ucred *cred;
533325335Sjkim	IN struct thread *td;
534290207Sjkim};
535325335Sjkim
536290207Sjkim
537290207Sjkim%% getextattr	vp	L L L
538325335Sjkim
539325335Sjkimvop_getextattr {
540290207Sjkim	IN struct vnode *vp;
541325335Sjkim	IN int attrnamespace;
542325335Sjkim	IN const char *name;
543325335Sjkim	INOUT struct uio *uio;
544325335Sjkim	OUT size_t *size;
545325335Sjkim	IN struct ucred *cred;
546325335Sjkim	IN struct thread *td;
547290207Sjkim};
548325335Sjkim
549325335Sjkim
550325335Sjkim%% listextattr	vp	L L L
551325335Sjkim
552290207Sjkimvop_listextattr {
553290207Sjkim	IN struct vnode *vp;
554290207Sjkim	IN int attrnamespace;
555290207Sjkim	INOUT struct uio *uio;
556290207Sjkim	OUT size_t *size;
557325335Sjkim	IN struct ucred *cred;
558290207Sjkim	IN struct thread *td;
559290207Sjkim};
560325335Sjkim
561290207Sjkim
562290207Sjkim%% openextattr	vp	L L L
563290207Sjkim
564325335Sjkimvop_openextattr {
565290207Sjkim	IN struct vnode *vp;
566325335Sjkim	IN struct ucred *cred;
567290207Sjkim	IN struct thread *td;
568325335Sjkim};
569325335Sjkim
570290207Sjkim
571290207Sjkim%% deleteextattr	vp	E E E
572290207Sjkim%! deleteextattr	post	vop_deleteextattr_post
573325335Sjkim
574325335Sjkimvop_deleteextattr {
575325335Sjkim	IN struct vnode *vp;
576325335Sjkim	IN int attrnamespace;
577325335Sjkim	IN const char *name;
578325335Sjkim	IN struct ucred *cred;
579325335Sjkim	IN struct thread *td;
580110655Snectar};
581110655Snectar
582110655Snectar
583325335Sjkim%% setextattr	vp	E E E
584110655Snectar%! setextattr	post	vop_setextattr_post
585110655Snectar
586325335Sjkimvop_setextattr {
587325335Sjkim	IN struct vnode *vp;
588110655Snectar	IN int attrnamespace;
589325335Sjkim	IN const char *name;
590325335Sjkim	INOUT struct uio *uio;
591110655Snectar	IN struct ucred *cred;
592110655Snectar	IN struct thread *td;
593110655Snectar};
594325335Sjkim
595110655Snectar
596110655Snectar%% setlabel	vp	E E E
597110655Snectar
598110655Snectarvop_setlabel {
599110655Snectar	IN struct vnode *vp;
600290207Sjkim	IN struct label *label;
601160819Ssimon	IN struct ucred *cred;
602325335Sjkim	IN struct thread *td;
603325335Sjkim};
604110655Snectar
605110655Snectar
606325335Sjkim%% vptofh	vp	= = =
607325335Sjkim
608110655Snectarvop_vptofh {
609325335Sjkim	IN struct vnode *vp;
610325335Sjkim	IN struct fid *fhp;
611325335Sjkim};
612110655Snectar
613325335Sjkim
614110655Snectar%% vptocnp		vp	L L L
615110655Snectar%% vptocnp		vpp	- U -
616110655Snectar
617325335Sjkimvop_vptocnp {
618325335Sjkim	IN struct vnode *vp;
619325335Sjkim	OUT struct vnode **vpp;
620325335Sjkim	IN struct ucred *cred;
621325335Sjkim	INOUT char *buf;
622325335Sjkim	INOUT int *buflen;
623325335Sjkim};
624325335Sjkim
625325335Sjkim
626110655Snectar%% allocate	vp	E E E
627110655Snectar
628325335Sjkimvop_allocate {
629325335Sjkim	IN struct vnode *vp;
630325335Sjkim	INOUT off_t *offset;
631110655Snectar	INOUT off_t *len;
632110655Snectar};
633238405Sjkim
634238405Sjkim%% advise	vp	U U U
635238405Sjkim
636238405Sjkimvop_advise {
637325335Sjkim	IN struct vnode *vp;
638238405Sjkim	IN off_t start;
639325335Sjkim	IN off_t end;
640238405Sjkim	IN int advice;
641325335Sjkim};
642325335Sjkim
643298998Sjkim%% unp_bind	vp	E E E
644298998Sjkim
645325335Sjkimvop_unp_bind {
646325335Sjkim	IN struct vnode *vp;
647325335Sjkim	IN struct socket *socket;
648325335Sjkim};
649325335Sjkim
650325335Sjkim%% unp_connect	vp	L L L
651325335Sjkim
652325335Sjkimvop_unp_connect {
653325335Sjkim	IN struct vnode *vp;
654110655Snectar	OUT struct socket **socket;
655325335Sjkim};
656325335Sjkim
657325335Sjkim%% unp_detach	vp	= = =
658325335Sjkim
659325335Sjkimvop_unp_detach {
660110655Snectar	IN struct vnode *vp;
661325335Sjkim};
662325335Sjkim
663325335Sjkim# The VOPs below are spares at the end of the table to allow new VOPs to be
664110655Snectar# added in stable branches without breaking the KBI.  New VOPs in HEAD should
665325335Sjkim# be added above these spares.  When merging a new VOP to a stable branch,
666325335Sjkim# the new VOP should replace one of the spares.
667110655Snectar
668110655Snectarvop_spare1 {
669325335Sjkim	IN struct vnode *vp;
670325335Sjkim};
671110655Snectar
672325335Sjkimvop_spare2 {
673325335Sjkim	IN struct vnode *vp;
674325335Sjkim};
675325335Sjkim
676325335Sjkimvop_spare3 {
677325335Sjkim	IN struct vnode *vp;
678325335Sjkim};
679325335Sjkim
680325335Sjkimvop_spare4 {
681325335Sjkim	IN struct vnode *vp;
682325335Sjkim};
683325335Sjkim
684325335Sjkimvop_spare5 {
685325335Sjkim	IN struct vnode *vp;
686325335Sjkim};
687325335Sjkim