]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/kern/vnode_if.src
Fix missing pfctl(8) tunable.
[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 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 successful
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-coded 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
62 vop_islocked {
63         IN struct vnode *vp;
64 };
65
66
67 %% lookup       dvp     L L L
68 %% lookup       vpp     - L -
69
70 # XXX - the lookup locking protocol defies simple description and depends
71 #       on the flags and operation fields in the (cnp) structure.  Note
72 #       especially that *vpp may equal dvp and both may be locked.
73
74 vop_lookup {
75         IN struct vnode *dvp;
76         INOUT struct vnode **vpp;
77         IN struct componentname *cnp;
78 };
79
80
81 %% cachedlookup dvp     L L L
82 %% cachedlookup vpp     - L -
83
84 # This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
85
86 vop_cachedlookup {
87         IN struct vnode *dvp;
88         INOUT struct vnode **vpp;
89         IN struct componentname *cnp;
90 };
91
92
93 %% create       dvp     E E E
94 %% create       vpp     - L -
95 %! create       post    vop_create_post
96
97 vop_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
107 vop_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
118 vop_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 %! open         post    vop_open_post
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 struct file *fp;
135 };
136
137
138 %% close        vp      L L L
139 %! close        post    vop_close_post
140
141 vop_close {
142         IN struct vnode *vp;
143         IN int fflag;
144         IN struct ucred *cred;
145         IN struct thread *td;
146 };
147
148
149 %% access       vp      L L L
150
151 vop_access {
152         IN struct vnode *vp;
153         IN accmode_t accmode;
154         IN struct ucred *cred;
155         IN struct thread *td;
156 };
157
158
159 %% accessx      vp      L L L
160
161 vop_accessx {
162         IN struct vnode *vp;
163         IN accmode_t accmode;
164         IN struct ucred *cred;
165         IN struct thread *td;
166 };
167
168
169 %% getattr      vp      L L L
170
171 vop_getattr {
172         IN struct vnode *vp;
173         OUT struct vattr *vap;
174         IN struct ucred *cred;
175 };
176
177
178 %% setattr      vp      E E E
179 %! setattr      post    vop_setattr_post
180
181 vop_setattr {
182         IN struct vnode *vp;
183         IN struct vattr *vap;
184         IN struct ucred *cred;
185 };
186
187
188 %% markatime    vp      L L L
189
190 vop_markatime {
191         IN struct vnode *vp;
192 };
193
194
195 %% read         vp      L L L
196 %! read         post    vop_read_post
197
198 vop_read {
199         IN struct vnode *vp;
200         INOUT struct uio *uio;
201         IN int ioflag;
202         IN struct ucred *cred;
203 };
204
205
206 %% write        vp      L L L
207 %! write        pre     VOP_WRITE_PRE
208 %! write        post    VOP_WRITE_POST
209
210 vop_write {
211         IN struct vnode *vp;
212         INOUT struct uio *uio;
213         IN int ioflag;
214         IN struct ucred *cred;
215 };
216
217
218 %% ioctl        vp      U U U
219
220 vop_ioctl {
221         IN struct vnode *vp;
222         IN u_long command;
223         IN void *data;
224         IN int fflag;
225         IN struct ucred *cred;
226         IN struct thread *td;
227 };
228
229
230 %% poll         vp      U U U
231
232 vop_poll {
233         IN struct vnode *vp;
234         IN int events;
235         IN struct ucred *cred;
236         IN struct thread *td;
237 };
238
239
240 %% kqfilter     vp      U U U
241
242 vop_kqfilter {
243         IN struct vnode *vp;
244         IN struct knote *kn;
245 };
246
247
248 %% revoke       vp      L L L
249
250 vop_revoke {
251         IN struct vnode *vp;
252         IN int flags;
253 };
254
255
256 %% fsync        vp      L L L
257
258 vop_fsync {
259         IN struct vnode *vp;
260         IN int waitfor;
261         IN struct thread *td;
262 };
263
264
265 %% remove       dvp     E E E
266 %% remove       vp      E E E
267 %! remove       post    vop_remove_post
268
269 vop_remove {
270         IN struct vnode *dvp;
271         IN struct vnode *vp;
272         IN struct componentname *cnp;
273 };
274
275
276 %% link         tdvp    E E E
277 %% link         vp      E E E
278 %! link         post    vop_link_post
279
280 vop_link {
281         IN struct vnode *tdvp;
282         IN struct vnode *vp;
283         IN struct componentname *cnp;
284 };
285
286
287 %! rename       pre     vop_rename_pre
288 %! rename       post    vop_rename_post
289
290 vop_rename {
291         IN WILLRELE struct vnode *fdvp;
292         IN WILLRELE struct vnode *fvp;
293         IN struct componentname *fcnp;
294         IN WILLRELE struct vnode *tdvp;
295         IN WILLRELE struct vnode *tvp;
296         IN struct componentname *tcnp;
297 };
298
299
300 %% mkdir        dvp     E E E
301 %% mkdir        vpp     - E -
302 %! mkdir        post    vop_mkdir_post
303
304 vop_mkdir {
305         IN struct vnode *dvp;
306         OUT struct vnode **vpp;
307         IN struct componentname *cnp;
308         IN struct vattr *vap;
309 };
310
311
312 %% rmdir        dvp     E E E
313 %% rmdir        vp      E E E
314 %! rmdir        post    vop_rmdir_post
315
316 vop_rmdir {
317         IN struct vnode *dvp;
318         IN struct vnode *vp;
319         IN struct componentname *cnp;
320 };
321
322
323 %% symlink      dvp     E E E
324 %% symlink      vpp     - E -
325 %! symlink      post    vop_symlink_post
326
327 vop_symlink {
328         IN struct vnode *dvp;
329         OUT struct vnode **vpp;
330         IN struct componentname *cnp;
331         IN struct vattr *vap;
332         IN char *target;
333 };
334
335
336 %% readdir      vp      L L L
337 %! readdir      post    vop_readdir_post
338
339 vop_readdir {
340         IN struct vnode *vp;
341         INOUT struct uio *uio;
342         IN struct ucred *cred;
343         INOUT int *eofflag;
344         OUT int *ncookies;
345         INOUT u_long **cookies;
346 };
347
348
349 %% readlink     vp      L L L
350
351 vop_readlink {
352         IN struct vnode *vp;
353         INOUT struct uio *uio;
354         IN struct ucred *cred;
355 };
356
357
358 %% inactive     vp      E E E
359
360 vop_inactive {
361         IN struct vnode *vp;
362         IN struct thread *td;
363 };
364
365
366 %% reclaim      vp      E E E
367 %! reclaim      post    vop_reclaim_post
368
369 vop_reclaim {
370         IN struct vnode *vp;
371         IN struct thread *td;
372 };
373
374
375 %! lock1        pre     vop_lock_pre
376 %! lock1        post    vop_lock_post
377
378 vop_lock1 {
379         IN struct vnode *vp;
380         IN int flags;
381         IN char *file;
382         IN int line;
383 };
384
385
386 %! unlock       pre     vop_unlock_pre
387 %! unlock       post    vop_unlock_post
388
389 vop_unlock {
390         IN struct vnode *vp;
391         IN int flags;
392 };
393
394
395 %% bmap         vp      L L L
396
397 vop_bmap {
398         IN struct vnode *vp;
399         IN daddr_t bn;
400         OUT struct bufobj **bop;
401         IN daddr_t *bnp;
402         OUT int *runp;
403         OUT int *runb;
404 };
405
406
407 %% strategy     vp      L L L
408 %! strategy     pre     vop_strategy_pre
409
410 vop_strategy {
411         IN struct vnode *vp;
412         IN struct buf *bp;
413 };
414
415
416 %% getwritemount vp     = = =
417
418 vop_getwritemount {
419         IN struct vnode *vp;
420         OUT struct mount **mpp;
421 };
422
423
424 %% print        vp      - - -
425
426 vop_print {
427         IN struct vnode *vp;
428 };
429
430
431 %% pathconf     vp      L L L
432
433 vop_pathconf {
434         IN struct vnode *vp;
435         IN int name;
436         OUT register_t *retval;
437 };
438
439
440 %% advlock      vp      U U U
441
442 vop_advlock {
443         IN struct vnode *vp;
444         IN void *id;
445         IN int op;
446         IN struct flock *fl;
447         IN int flags;
448 };
449
450
451 %% advlockasync vp      U U U
452
453 vop_advlockasync {
454         IN struct vnode *vp;
455         IN void *id;
456         IN int op;
457         IN struct flock *fl;
458         IN int flags;
459         IN struct task *task;   
460         INOUT void **cookiep;
461 };
462
463
464 %% advlockpurge vp      E E E
465
466 vop_advlockpurge {
467         IN struct vnode *vp;
468 };
469
470
471 %% reallocblks  vp      E E E
472
473 vop_reallocblks {
474         IN struct vnode *vp;
475         IN struct cluster_save *buflist;
476 };
477
478
479 %% getpages     vp      L L L
480
481 vop_getpages {
482         IN struct vnode *vp;
483         IN vm_page_t *m;
484         IN int count;
485         IN int *rbehind;
486         IN int *rahead;
487 };
488
489
490 %% getpages_async       vp      L L L
491
492 vop_getpages_async {
493         IN struct vnode *vp;
494         IN vm_page_t *m;
495         IN int count;
496         IN int *rbehind;
497         IN int *rahead;
498         IN vop_getpages_iodone_t *iodone;
499         IN void *arg;
500 };
501
502
503 %% putpages     vp      L L L
504
505 vop_putpages {
506         IN struct vnode *vp;
507         IN vm_page_t *m;
508         IN int count;
509         IN int sync;
510         IN int *rtvals;
511 };
512
513
514 %% getacl       vp      L L L
515
516 vop_getacl {
517         IN struct vnode *vp;
518         IN acl_type_t type;
519         OUT struct acl *aclp;
520         IN struct ucred *cred;
521         IN struct thread *td;
522 };
523
524
525 %% setacl       vp      E E E
526
527 vop_setacl {
528         IN struct vnode *vp;
529         IN acl_type_t type;
530         IN struct acl *aclp;
531         IN struct ucred *cred;
532         IN struct thread *td;
533 };
534
535
536 %% aclcheck     vp      = = =
537
538 vop_aclcheck {
539         IN struct vnode *vp;
540         IN acl_type_t type;
541         IN struct acl *aclp;
542         IN struct ucred *cred;
543         IN struct thread *td;
544 };
545
546
547 %% closeextattr vp      L L L
548
549 vop_closeextattr {
550         IN struct vnode *vp;
551         IN int commit;
552         IN struct ucred *cred;
553         IN struct thread *td;
554 };
555
556
557 %% getextattr   vp      L L L
558
559 vop_getextattr {
560         IN struct vnode *vp;
561         IN int attrnamespace;
562         IN const char *name;
563         INOUT struct uio *uio;
564         OUT size_t *size;
565         IN struct ucred *cred;
566         IN struct thread *td;
567 };
568
569
570 %% listextattr  vp      L L L
571
572 vop_listextattr {
573         IN struct vnode *vp;
574         IN int attrnamespace;
575         INOUT struct uio *uio;
576         OUT size_t *size;
577         IN struct ucred *cred;
578         IN struct thread *td;
579 };
580
581
582 %% openextattr  vp      L L L
583
584 vop_openextattr {
585         IN struct vnode *vp;
586         IN struct ucred *cred;
587         IN struct thread *td;
588 };
589
590
591 %% deleteextattr        vp      E E E
592 %! deleteextattr        post    vop_deleteextattr_post
593
594 vop_deleteextattr {
595         IN struct vnode *vp;
596         IN int attrnamespace;
597         IN const char *name;
598         IN struct ucred *cred;
599         IN struct thread *td;
600 };
601
602
603 %% setextattr   vp      E E E
604 %! setextattr   post    vop_setextattr_post
605
606 vop_setextattr {
607         IN struct vnode *vp;
608         IN int attrnamespace;
609         IN const char *name;
610         INOUT struct uio *uio;
611         IN struct ucred *cred;
612         IN struct thread *td;
613 };
614
615
616 %% setlabel     vp      E E E
617
618 vop_setlabel {
619         IN struct vnode *vp;
620         IN struct label *label;
621         IN struct ucred *cred;
622         IN struct thread *td;
623 };
624
625
626 %% vptofh       vp      = = =
627
628 vop_vptofh {
629         IN struct vnode *vp;
630         IN struct fid *fhp;
631 };
632
633
634 %% vptocnp              vp      L L L
635 %% vptocnp              vpp     - U -
636
637 vop_vptocnp {
638         IN struct vnode *vp;
639         OUT struct vnode **vpp;
640         IN struct ucred *cred;
641         INOUT char *buf;
642         INOUT int *buflen;
643 };
644
645
646 %% allocate     vp      E E E
647
648 vop_allocate {
649         IN struct vnode *vp;
650         INOUT off_t *offset;
651         INOUT off_t *len;
652 };
653
654
655 %% advise       vp      U U U
656
657 vop_advise {
658         IN struct vnode *vp;
659         IN off_t start;
660         IN off_t end;
661         IN int advice;
662 };
663
664
665 %% unp_bind     vp      E E E
666
667 vop_unp_bind {
668         IN struct vnode *vp;
669         IN struct socket *socket;
670 };
671
672
673 %% unp_connect  vp      L L L
674
675 vop_unp_connect {
676         IN struct vnode *vp;
677         OUT struct socket **socket;
678 };
679
680
681 %% unp_detach   vp      = = =
682
683 vop_unp_detach {
684         IN struct vnode *vp;
685 };
686
687
688 %% is_text      vp      L L L
689
690 vop_is_text {
691         IN struct vnode *vp;
692 };
693
694
695 %% set_text     vp      E E E
696
697 vop_set_text {
698         IN struct vnode *vp;
699 };
700
701
702 %% vop_unset_text       vp      E E E
703
704 vop_unset_text {
705         IN struct vnode *vp;
706 };
707
708
709 %% get_writecount       vp      L L L
710
711 vop_get_writecount {
712         IN struct vnode *vp;
713         OUT int *writecount;
714 };
715
716
717 %% add_writecount       vp      E E E
718
719 vop_add_writecount {
720         IN struct vnode *vp;
721         IN int inc;
722 };
723
724
725 %% fdatasync    vp      L L L
726
727 vop_fdatasync {
728         IN struct vnode *vp;
729         IN struct thread *td;
730 };
731
732
733 # The VOPs below are spares at the end of the table to allow new VOPs to be
734 # added in stable branches without breaking the KBI.  New VOPs in HEAD should
735 # be added above these spares.  When merging a new VOP to a stable branch,
736 # the new VOP should replace one of the spares.
737
738 vop_spare1 {
739         IN struct vnode *vp;
740 };
741
742 vop_spare2 {
743         IN struct vnode *vp;
744 };
745
746 vop_spare3 {
747         IN struct vnode *vp;
748 };
749
750 vop_spare4 {
751         IN struct vnode *vp;
752 };
753
754 vop_spare5 {
755         IN struct vnode *vp;
756 };