vnode_if.src revision 68186
1#
2# Copyright (c) 1992, 1993
3#	The Regents of the University of California.  All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8# 1. Redistributions of source code must retain the above copyright
9#    notice, this list of conditions and the following disclaimer.
10# 2. Redistributions in binary form must reproduce the above copyright
11#    notice, this list of conditions and the following disclaimer in the
12#    documentation and/or other materials provided with the distribution.
13# 3. All advertising materials mentioning features or use of this software
14#    must display the following acknowledgement:
15#	This product includes software developed by the University of
16#	California, Berkeley and its contributors.
17# 4. Neither the name of the University nor the names of its contributors
18#    may be used to endorse or promote products derived from this software
19#    without specific prior written permission.
20#
21# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31# SUCH DAMAGE.
32#
33#	@(#)vnode_if.src	8.12 (Berkeley) 5/14/95
34# $FreeBSD: head/sys/kern/vnode_if.src 68186 2000-11-01 17:57:24Z eivind $
35#
36
37#
38# Above each of the vop descriptors is a specification of the locking
39# protocol used by each vop call.  The first column is the name of
40# the variable, the remaining three columns are in, out and error
41# respectively.  The "in" column defines the lock state on input,
42# the "out" column defines the state on succesful return, and the
43# "error" column defines the locking state on error exit.
44#
45# The locking value can take the following values:
46# L: locked; not converted to type of lock.
47# A: any lock type.
48# S: locked with shared lock.
49# E: locked with exclusive lock for this process.
50# O: locked with exclusive lock for other process.
51# U: unlocked.
52# -: not applicable.  vnode does not yet (or no longer) exists.
53# =: the same on input and output, may be either L or U.
54# X: locked if not nil.
55#
56
57#
58#% islocked	vp	= = =
59#
60vop_islocked {
61	IN struct vnode *vp;
62	IN struct proc *p;
63};
64
65#
66#% lookup	dvp	L ? ?
67#% lookup	vpp	- L -
68#
69# XXX - the lookup locking protocol defies simple description and depends
70#	on the flags and operation fields in the (cnp) structure.  Note
71#	especially that *vpp may equal dvp and both may be locked.
72#
73vop_lookup {
74	IN struct vnode *dvp;
75	INOUT struct vnode **vpp;
76	IN struct componentname *cnp;
77};
78
79#
80#% cachedlookup	dvp	L ? ?
81#% cachedlookup	vpp	- L -
82#
83# This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
84#
85vop_cachedlookup {
86	IN struct vnode *dvp;
87	INOUT struct vnode **vpp;
88	IN struct componentname *cnp;
89};
90
91#
92#% create	dvp	L L L
93#% create	vpp	- L -
94#
95vop_create {
96	IN struct vnode *dvp;
97	OUT struct vnode **vpp;
98	IN struct componentname *cnp;
99	IN struct vattr *vap;
100};
101
102#
103#% whiteout	dvp	L L L
104#
105vop_whiteout {
106	IN struct vnode *dvp;
107	IN struct componentname *cnp;
108	IN int flags;
109};
110
111#
112#% mknod	dvp	L L L
113#% mknod	vpp	- X -
114#
115vop_mknod {
116	IN struct vnode *dvp;
117	OUT struct vnode **vpp;
118	IN struct componentname *cnp;
119	IN struct vattr *vap;
120};
121
122#
123#% open		vp	L L L
124#
125vop_open {
126	IN struct vnode *vp;
127	IN int mode;
128	IN struct ucred *cred;
129	IN struct proc *p;
130};
131
132#
133#% close	vp	U U U
134#
135vop_close {
136	IN struct vnode *vp;
137	IN int fflag;
138	IN struct ucred *cred;
139	IN struct proc *p;
140};
141
142#
143#% access	vp	L L L
144#
145vop_access {
146	IN struct vnode *vp;
147	IN int mode;
148	IN struct ucred *cred;
149	IN struct proc *p;
150};
151
152#
153#% getattr	vp	= = =
154#
155vop_getattr {
156	IN struct vnode *vp;
157	OUT struct vattr *vap;
158	IN struct ucred *cred;
159	IN struct proc *p;
160};
161
162#
163#% setattr	vp	L L L
164#
165vop_setattr {
166	IN struct vnode *vp;
167	IN struct vattr *vap;
168	IN struct ucred *cred;
169	IN struct proc *p;
170};
171
172#
173#% read		vp	L L L
174#
175vop_read {
176	IN struct vnode *vp;
177	INOUT struct uio *uio;
178	IN int ioflag;
179	IN struct ucred *cred;
180};
181
182#
183#% write	vp	L L L
184#
185vop_write {
186	IN struct vnode *vp;
187	INOUT struct uio *uio;
188	IN int ioflag;
189	IN struct ucred *cred;
190};
191
192#
193#% lease	vp	= = =
194#
195vop_lease {
196	IN struct vnode *vp;
197	IN struct proc *p;
198	IN struct ucred *cred;
199	IN int flag;
200};
201
202#
203#% ioctl	vp	U U U
204#
205vop_ioctl {
206	IN struct vnode *vp;
207	IN u_long command;
208	IN caddr_t data;
209	IN int fflag;
210	IN struct ucred *cred;
211	IN struct proc *p;
212};
213
214#
215#% poll	vp	U U U
216#
217vop_poll {
218	IN struct vnode *vp;
219	IN int events;
220	IN struct ucred *cred;
221	IN struct proc *p;
222};
223
224#
225#% revoke	vp	U U U
226#
227vop_revoke {
228	IN struct vnode *vp;
229	IN int flags;
230};
231
232#
233#% fsync	vp	L L L
234#
235vop_fsync {
236	IN struct vnode *vp;
237	IN struct ucred *cred;
238	IN int waitfor;
239	IN struct proc *p;
240};
241
242#
243#% remove	dvp	L L L
244#% remove	vp	L L L
245#
246vop_remove {
247	IN struct vnode *dvp;
248	IN struct vnode *vp;
249	IN struct componentname *cnp;
250};
251
252#
253#% link		tdvp	L L L
254#% link		vp	U U U
255#
256vop_link {
257	IN struct vnode *tdvp;
258	IN struct vnode *vp;
259	IN struct componentname *cnp;
260};
261
262#
263#% rename	fdvp	U U U
264#% rename	fvp	U U U
265#% rename	tdvp	L U U
266#% rename	tvp	X U U
267#
268vop_rename {
269	IN WILLRELE struct vnode *fdvp;
270	IN WILLRELE struct vnode *fvp;
271	IN struct componentname *fcnp;
272	IN WILLRELE struct vnode *tdvp;
273	IN WILLRELE struct vnode *tvp;
274	IN struct componentname *tcnp;
275};
276
277#
278#% mkdir	dvp	L L L
279#% mkdir	vpp	- L -
280#
281vop_mkdir {
282	IN struct vnode *dvp;
283	OUT struct vnode **vpp;
284	IN struct componentname *cnp;
285	IN struct vattr *vap;
286};
287
288#
289#% rmdir	dvp	L L L
290#% rmdir	vp	L L L
291#
292vop_rmdir {
293	IN struct vnode *dvp;
294	IN struct vnode *vp;
295	IN struct componentname *cnp;
296};
297
298#
299#% symlink	dvp	L L L
300#% symlink	vpp	- U -
301#
302vop_symlink {
303	IN struct vnode *dvp;
304	OUT struct vnode **vpp;
305	IN struct componentname *cnp;
306	IN struct vattr *vap;
307	IN char *target;
308};
309
310#
311#% readdir	vp	L L L
312#
313vop_readdir {
314	IN struct vnode *vp;
315	INOUT struct uio *uio;
316	IN struct ucred *cred;
317	INOUT int *eofflag;
318	OUT int *ncookies;
319	INOUT u_long **cookies;
320};
321
322#
323#% readlink	vp	L L L
324#
325vop_readlink {
326	IN struct vnode *vp;
327	INOUT struct uio *uio;
328	IN struct ucred *cred;
329};
330
331#
332#% inactive	vp	L U U
333#
334vop_inactive {
335	IN struct vnode *vp;
336	IN struct proc *p;
337};
338
339#
340#% reclaim	vp	U U U
341#
342vop_reclaim {
343	IN struct vnode *vp;
344	IN struct proc *p;
345};
346
347#
348#% lock		vp	? ? ?
349#
350vop_lock {
351	IN struct vnode *vp;
352	IN int flags;
353	IN struct proc *p;
354};
355
356#
357#% unlock	vp	L U L
358#
359vop_unlock {
360	IN struct vnode *vp;
361	IN int flags;
362	IN struct proc *p;
363};
364
365#
366#% bmap		vp	L L L
367#% bmap		vpp	- U -
368#
369vop_bmap {
370	IN struct vnode *vp;
371	IN daddr_t bn;
372	OUT struct vnode **vpp;
373	IN daddr_t *bnp;
374	OUT int *runp;
375	OUT int *runb;
376};
377
378#
379#% strategy	vp	L L L
380#
381vop_strategy {
382	IN struct vnode *vp;
383	IN struct buf *bp;
384};
385
386#
387#% getwritemount vp	= = =
388#
389vop_getwritemount {
390	IN struct vnode *vp;
391	OUT struct mount **mpp;
392};
393
394#
395#% copyonwrite  vp	L L L
396#
397vop_copyonwrite {
398	IN struct vnode *vp;
399	IN struct buf *bp;
400};
401
402#
403#% print	vp	= = =
404#
405vop_print {
406	IN struct vnode *vp;
407};
408
409#
410#% pathconf	vp	L L L
411#
412vop_pathconf {
413	IN struct vnode *vp;
414	IN int name;
415	OUT register_t *retval;
416};
417
418#
419#% advlock	vp	U U U
420#
421vop_advlock {
422	IN struct vnode *vp;
423	IN caddr_t id;
424	IN int op;
425	IN struct flock *fl;
426	IN int flags;
427};
428
429#
430#% balloc	vp	L L L
431#
432vop_balloc {
433	IN struct vnode *vp;
434	IN off_t startoffset;
435	IN int size;
436	IN struct ucred *cred;
437	IN int flags;
438	OUT struct buf **bpp;
439};
440
441#
442#% reallocblks	vp	L L L
443#
444vop_reallocblks {
445	IN struct vnode *vp;
446	IN struct cluster_save *buflist;
447};
448
449#
450#% getpages	vp	L L L
451#
452vop_getpages {
453	IN struct vnode *vp;
454	IN vm_page_t *m;
455	IN int count;
456	IN int reqpage;
457	IN vm_ooffset_t offset;
458};
459
460#
461#% putpages	vp	L L L
462#
463vop_putpages {
464	IN struct vnode *vp;
465	IN vm_page_t *m;
466	IN int count;
467	IN int sync;
468	IN int *rtvals;
469	IN vm_ooffset_t offset;
470};
471
472#
473#% freeblks	vp	- - -
474#
475# This call is used by the filesystem to release blocks back to 
476# device-driver.  This is useful if the driver has a lengthy 
477# erase handling or similar.
478#
479
480vop_freeblks {
481	IN struct vnode *vp;
482	IN daddr_t addr;
483	IN daddr_t length;
484};
485
486#
487#% bwrite	vp	L L L
488#
489vop_bwrite {
490	IN struct vnode *vp;
491	IN struct buf *bp;
492};
493
494#
495#% getacl	vp	L L L
496#
497vop_getacl {
498	IN struct vnode *vp;
499	IN acl_type_t type;
500	OUT struct acl *aclp;
501	IN struct ucred *cred;
502	IN struct proc *p;
503};
504
505#
506#% setacl	vp	L L L
507#
508vop_setacl {
509	IN struct vnode *vp;
510	IN acl_type_t type;
511	IN struct acl *aclp;
512	IN struct ucred *cred;
513	IN struct proc *p;
514};
515
516#
517#% aclcheck	vp	= = =
518#
519vop_aclcheck {
520	IN struct vnode *vp;
521	IN acl_type_t type;
522	IN struct acl *aclp;
523	IN struct ucred *cred;
524	IN struct proc *p;
525};
526
527#
528#% getextattr	vp	L L L
529#
530vop_getextattr {
531	IN struct vnode *vp;
532	IN const char *name;
533	INOUT struct uio *uio;
534	IN struct ucred *cred;
535	IN struct proc *p;
536};
537
538#
539#% setextattr	vp	L L L
540#
541vop_setextattr {
542	IN struct vnode *vp;
543	IN const char *name;
544	INOUT struct uio *uio;
545	IN struct ucred *cred;
546	IN struct proc *p;
547};
548
549#
550#% createvobject	vp	L L L
551#
552vop_createvobject {
553	IN struct vnode *vp;
554	IN struct ucred *cred;
555	IN struct proc *p;
556};
557
558#
559#% destroyvobject	vp	L L L
560#
561vop_destroyvobject {
562	IN struct vnode *vp;
563};
564
565#
566#% getvobject	vp	L L L
567#
568vop_getvobject {
569	IN struct vnode *vp;
570	OUT struct vm_object **objpp;
571};
572