]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/kern/vnode_if.src
- CLOSE, REVOKE, INACTIVE, and RECLAIM are not L L L, that's a locked vnode
[FreeBSD/FreeBSD.git] / sys / kern / vnode_if.src
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 is a specification of the locking
35 # protocol used by each vop call.  The first column is the name of
36 # the variable, the remaining three columns are in, out and error
37 # respectively.  The "in" column defines the lock state on input,
38 # the "out" column defines the state on succesful return, and the
39 # "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 # If other such parameters are introduced, they have to be added to
56 # the AWK script at the head of the definition of "add_debug_code()".
57 #
58
59 #
60 # islocked      vp      = = =
61 #
62 vop_islocked {
63         IN struct vnode *vp;
64         IN struct thread *td;
65 };
66
67 #
68 # lookup        dvp     L ? ?
69 # lookup        vpp     - L -
70 #! lookup       pre     vop_lookup_pre
71 #! lookup       post    vop_lookup_post
72 #
73 # XXX - the lookup locking protocol defies simple description and depends
74 #       on the flags and operation fields in the (cnp) structure.  Note
75 #       especially that *vpp may equal dvp and both may be locked.
76 #
77 vop_lookup {
78         IN struct vnode *dvp;
79         INOUT struct vnode **vpp;
80         IN struct componentname *cnp;
81 };
82
83 #
84 #% cachedlookup dvp     L ? ?
85 #% cachedlookup vpp     - L -
86 #
87 # This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
88 #
89 vop_cachedlookup {
90         IN struct vnode *dvp;
91         INOUT struct vnode **vpp;
92         IN struct componentname *cnp;
93 };
94
95 #
96 #% create       dvp     L L L
97 #% create       vpp     - L -
98 #
99 vop_create {
100         IN struct vnode *dvp;
101         OUT struct vnode **vpp;
102         IN struct componentname *cnp;
103         IN struct vattr *vap;
104 };
105
106 #
107 #% whiteout     dvp     L L L
108 #
109 vop_whiteout {
110         IN struct vnode *dvp;
111         IN struct componentname *cnp;
112         IN int flags;
113 };
114
115 #
116 #% mknod        dvp     L L L
117 #% mknod        vpp     - L -
118 #
119 vop_mknod {
120         IN struct vnode *dvp;
121         OUT struct vnode **vpp;
122         IN struct componentname *cnp;
123         IN struct vattr *vap;
124 };
125
126 #
127 #% open         vp      L L L
128 #
129 vop_open {
130         IN struct vnode *vp;
131         IN int mode;
132         IN struct ucred *cred;
133         IN struct thread *td;
134         IN int fdidx;
135 };
136
137 #
138 #% close        vp      L L L
139 #
140 vop_close {
141         IN struct vnode *vp;
142         IN int fflag;
143         IN struct ucred *cred;
144         IN struct thread *td;
145 };
146
147 #
148 #% access       vp      L L L
149 #
150 vop_access {
151         IN struct vnode *vp;
152         IN int mode;
153         IN struct ucred *cred;
154         IN struct thread *td;
155 };
156
157 #
158 #% getattr      vp      L L L
159 #
160 vop_getattr {
161         IN struct vnode *vp;
162         OUT struct vattr *vap;
163         IN struct ucred *cred;
164         IN struct thread *td;
165 };
166
167 #
168 #% setattr      vp      L L L
169 #
170 vop_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 #
180 vop_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      L L L
189 #
190 vop_write {
191         IN struct vnode *vp;
192         INOUT struct uio *uio;
193         IN int ioflag;
194         IN struct ucred *cred;
195 };
196
197 #
198 #% lease        vp      = = =
199 #
200 vop_lease {
201         IN struct vnode *vp;
202         IN struct thread *td;
203         IN struct ucred *cred;
204         IN int flag;
205 };
206
207 #
208 #% ioctl        vp      U U U
209 #
210 vop_ioctl {
211         IN struct vnode *vp;
212         IN u_long command;
213         IN caddr_t data;
214         IN int fflag;
215         IN struct ucred *cred;
216         IN struct thread *td;
217 };
218
219 #
220 #% poll vp      U U U
221 #
222 vop_poll {
223         IN struct vnode *vp;
224         IN int events;
225         IN struct ucred *cred;
226         IN struct thread *td;
227 };
228
229 #
230 #% kqfilter     vp      U U U
231 #
232 vop_kqfilter {
233         IN struct vnode *vp;
234         IN struct knote *kn;
235 };
236
237 #
238 #% revoke       vp      L L L
239 #
240 vop_revoke {
241         IN struct vnode *vp;
242         IN int flags;
243 };
244
245 #
246 #% fsync        vp      L L L
247 #
248 vop_fsync {
249         IN struct vnode *vp;
250         IN int waitfor;
251         IN struct thread *td;
252 };
253
254 #
255 #% remove       dvp     L L L
256 #% remove       vp      L L L
257 #
258 vop_remove {
259         IN struct vnode *dvp;
260         IN struct vnode *vp;
261         IN struct componentname *cnp;
262 };
263
264 #
265 #% link         tdvp    L L L
266 #% link         vp      L L L
267 #
268 vop_link {
269         IN struct vnode *tdvp;
270         IN struct vnode *vp;
271         IN struct componentname *cnp;
272 };
273
274 #
275 # rename        fdvp    U U U
276 # rename        fvp     U U U
277 # rename        tdvp    L U U
278 # rename        tvp     X U U
279 #! rename       pre     vop_rename_pre
280 #
281 vop_rename {
282         IN WILLRELE struct vnode *fdvp;
283         IN WILLRELE struct vnode *fvp;
284         IN struct componentname *fcnp;
285         IN WILLRELE struct vnode *tdvp;
286         IN WILLRELE struct vnode *tvp;
287         IN struct componentname *tcnp;
288 };
289
290 #
291 #% mkdir        dvp     L L L
292 #% mkdir        vpp     - L -
293 #
294 vop_mkdir {
295         IN struct vnode *dvp;
296         OUT struct vnode **vpp;
297         IN struct componentname *cnp;
298         IN struct vattr *vap;
299 };
300
301 #
302 #% rmdir        dvp     L L L
303 #% rmdir        vp      L L L
304 #
305 vop_rmdir {
306         IN struct vnode *dvp;
307         IN struct vnode *vp;
308         IN struct componentname *cnp;
309 };
310
311 #
312 #% symlink      dvp     L L L
313 #% symlink      vpp     - L -
314 #
315 vop_symlink {
316         IN struct vnode *dvp;
317         OUT struct vnode **vpp;
318         IN struct componentname *cnp;
319         IN struct vattr *vap;
320         IN char *target;
321 };
322
323 #
324 #% readdir      vp      L L L
325 #
326 vop_readdir {
327         IN struct vnode *vp;
328         INOUT struct uio *uio;
329         IN struct ucred *cred;
330         INOUT int *eofflag;
331         OUT int *ncookies;
332         INOUT u_long **cookies;
333 };
334
335 #
336 #% readlink     vp      L L L
337 #
338 vop_readlink {
339         IN struct vnode *vp;
340         INOUT struct uio *uio;
341         IN struct ucred *cred;
342 };
343
344 #
345 #% inactive     vp      L L L
346 #
347 vop_inactive {
348         IN struct vnode *vp;
349         IN struct thread *td;
350 };
351
352 #
353 #% reclaim      vp      L L L
354 #
355 vop_reclaim {
356         IN struct vnode *vp;
357         IN struct thread *td;
358 };
359
360 #
361 #lock           vp      ? ? ?
362 #! lock         pre     vop_lock_pre
363 #! lock         post    vop_lock_post
364 #
365 vop_lock {
366         IN struct vnode *vp;
367         IN int flags;
368         IN struct thread *td;
369 };
370
371 #
372 #unlock         vp      L ? L
373 #! unlock       pre     vop_unlock_pre
374 #! unlock       post    vop_unlock_post
375 #
376 vop_unlock {
377         IN struct vnode *vp;
378         IN int flags;
379         IN struct thread *td;
380 };
381
382 #
383 #% bmap         vp      L L L
384 #
385 vop_bmap {
386         IN struct vnode *vp;
387         IN daddr_t bn;
388         OUT struct bufobj **bop;
389         IN daddr_t *bnp;
390         OUT int *runp;
391         OUT int *runb;
392 };
393
394 #
395 # strategy      vp      L L L
396 #! strategy     pre     vop_strategy_pre
397 #
398 vop_strategy {
399         IN struct vnode *vp;
400         IN struct buf *bp;
401 };
402
403 #
404 #% getwritemount vp     = = =
405 #
406 vop_getwritemount {
407         IN struct vnode *vp;
408         OUT struct mount **mpp;
409 };
410
411 #
412 #% print        vp      = = =
413 #
414 vop_print {
415         IN struct vnode *vp;
416 };
417
418 #
419 #% pathconf     vp      L L L
420 #
421 vop_pathconf {
422         IN struct vnode *vp;
423         IN int name;
424         OUT register_t *retval;
425 };
426
427 #
428 #% advlock      vp      U U U
429 #
430 vop_advlock {
431         IN struct vnode *vp;
432         IN caddr_t id;
433         IN int op;
434         IN struct flock *fl;
435         IN int flags;
436 };
437
438 #
439 #% reallocblks  vp      L L L
440 #
441 vop_reallocblks {
442         IN struct vnode *vp;
443         IN struct cluster_save *buflist;
444 };
445
446 #
447 #% getpages     vp      L L L
448 #
449 vop_getpages {
450         IN struct vnode *vp;
451         IN vm_page_t *m;
452         IN int count;
453         IN int reqpage;
454         IN vm_ooffset_t offset;
455 };
456
457 #
458 #% putpages     vp      L L L
459 #
460 vop_putpages {
461         IN struct vnode *vp;
462         IN vm_page_t *m;
463         IN int count;
464         IN int sync;
465         IN int *rtvals;
466         IN vm_ooffset_t offset;
467 };
468
469 #
470 #% getacl       vp      L L L
471 #
472 vop_getacl {
473         IN struct vnode *vp;
474         IN acl_type_t type;
475         OUT struct acl *aclp;
476         IN struct ucred *cred;
477         IN struct thread *td;
478 };
479
480 #
481 #% setacl       vp      L L L
482 #
483 vop_setacl {
484         IN struct vnode *vp;
485         IN acl_type_t type;
486         IN struct acl *aclp;
487         IN struct ucred *cred;
488         IN struct thread *td;
489 };
490
491 #
492 #% aclcheck     vp      = = =
493 #
494 vop_aclcheck {
495         IN struct vnode *vp;
496         IN acl_type_t type;
497         IN struct acl *aclp;
498         IN struct ucred *cred;
499         IN struct thread *td;
500 };
501
502 #
503 #% closeextattr vp      L L L
504 #
505 vop_closeextattr {
506         IN struct vnode *vp;
507         IN int commit;
508         IN struct ucred *cred;
509         IN struct thread *td;
510 };
511
512 #
513 #% getextattr   vp      L L L
514 #
515 vop_getextattr {
516         IN struct vnode *vp;
517         IN int attrnamespace;
518         IN const char *name;
519         INOUT struct uio *uio;
520         OUT size_t *size;
521         IN struct ucred *cred;
522         IN struct thread *td;
523 };
524
525 #
526 #% listextattr  vp      L L L
527 #
528 vop_listextattr {
529         IN struct vnode *vp;
530         IN int attrnamespace;
531         INOUT struct uio *uio;
532         OUT size_t *size;
533         IN struct ucred *cred;
534         IN struct thread *td;
535 };
536
537 #
538 #% openextattr  vp      L L L
539 #
540 vop_openextattr {
541         IN struct vnode *vp;
542         IN struct ucred *cred;
543         IN struct thread *td;
544 };
545
546 #
547 #% deleteextattr        vp      L L L
548 #
549 vop_deleteextattr {
550         IN struct vnode *vp;
551         IN int attrnamespace;
552         IN const char *name;
553         IN struct ucred *cred;
554         IN struct thread *td;
555 };
556
557 #
558 #% setextattr   vp      L L L
559 #
560 vop_setextattr {
561         IN struct vnode *vp;
562         IN int attrnamespace;
563         IN const char *name;
564         INOUT struct uio *uio;
565         IN struct ucred *cred;
566         IN struct thread *td;
567 };
568
569 #
570 #% setlabel     vp      L L L
571 #
572 vop_setlabel {
573         IN struct vnode *vp;
574         IN struct label *label;
575         IN struct ucred *cred;
576         IN struct thread *td;
577 };