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