FreeBSD/Linux Kernel Cross Reference
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: releng/10.0/sys/kern/vnode_if.src 243400 2012-11-22 10:36:10Z avg $
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-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 %% lookup dvp L L 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
73 vop_lookup {
74 IN struct vnode *dvp;
75 INOUT struct vnode **vpp;
76 IN struct componentname *cnp;
77 };
78
79 %% cachedlookup dvp L L L
80 %% cachedlookup vpp - L -
81
82 # This must be an exact copy of lookup. See kern/vfs_cache.c for details.
83
84 vop_cachedlookup {
85 IN struct vnode *dvp;
86 INOUT struct vnode **vpp;
87 IN struct componentname *cnp;
88 };
89
90 %% create dvp E E E
91 %% create vpp - L -
92 %! create post vop_create_post
93
94 vop_create {
95 IN struct vnode *dvp;
96 OUT struct vnode **vpp;
97 IN struct componentname *cnp;
98 IN struct vattr *vap;
99 };
100
101
102 %% whiteout dvp E E E
103
104 vop_whiteout {
105 IN struct vnode *dvp;
106 IN struct componentname *cnp;
107 IN int flags;
108 };
109
110
111 %% mknod dvp E E E
112 %% mknod vpp - L -
113 %! mknod post vop_mknod_post
114
115 vop_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
125 vop_open {
126 IN struct vnode *vp;
127 IN int mode;
128 IN struct ucred *cred;
129 IN struct thread *td;
130 IN struct file *fp;
131 };
132
133
134 %% close vp L L L
135
136 vop_close {
137 IN struct vnode *vp;
138 IN int fflag;
139 IN struct ucred *cred;
140 IN struct thread *td;
141 };
142
143
144 %% access vp L L L
145
146 vop_access {
147 IN struct vnode *vp;
148 IN accmode_t accmode;
149 IN struct ucred *cred;
150 IN struct thread *td;
151 };
152
153
154 %% accessx vp L L L
155
156 vop_accessx {
157 IN struct vnode *vp;
158 IN accmode_t accmode;
159 IN struct ucred *cred;
160 IN struct thread *td;
161 };
162
163
164 %% getattr vp L L L
165
166 vop_getattr {
167 IN struct vnode *vp;
168 OUT struct vattr *vap;
169 IN struct ucred *cred;
170 };
171
172
173 %% setattr vp E E E
174 %! setattr post vop_setattr_post
175
176 vop_setattr {
177 IN struct vnode *vp;
178 IN struct vattr *vap;
179 IN struct ucred *cred;
180 };
181
182 %% markatime vp L L L
183
184 vop_markatime {
185 IN struct vnode *vp;
186 };
187
188 %% read vp L L L
189
190 vop_read {
191 IN struct vnode *vp;
192 INOUT struct uio *uio;
193 IN int ioflag;
194 IN struct ucred *cred;
195 };
196
197
198 %% write vp L L L
199 %! write pre VOP_WRITE_PRE
200 %! write post VOP_WRITE_POST
201
202 vop_write {
203 IN struct vnode *vp;
204 INOUT struct uio *uio;
205 IN int ioflag;
206 IN struct ucred *cred;
207 };
208
209
210 %% ioctl vp U U U
211
212 vop_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
224 vop_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
234 vop_kqfilter {
235 IN struct vnode *vp;
236 IN struct knote *kn;
237 };
238
239
240 %% revoke vp L L L
241
242 vop_revoke {
243 IN struct vnode *vp;
244 IN int flags;
245 };
246
247
248 %% fsync vp L L L
249
250 vop_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
261 vop_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
272 vop_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
282 vop_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
296 vop_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
308 vop_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
319 vop_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
330 vop_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
342 vop_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
351 vop_inactive {
352 IN struct vnode *vp;
353 IN struct thread *td;
354 };
355
356
357 %% reclaim vp E E E
358
359 vop_reclaim {
360 IN struct vnode *vp;
361 IN struct thread *td;
362 };
363
364
365 %! lock1 pre vop_lock_pre
366 %! lock1 post vop_lock_post
367
368 vop_lock1 {
369 IN struct vnode *vp;
370 IN int flags;
371 IN char *file;
372 IN int line;
373 };
374
375
376 %! unlock pre vop_unlock_pre
377 %! unlock post vop_unlock_post
378
379 vop_unlock {
380 IN struct vnode *vp;
381 IN int flags;
382 };
383
384
385 %% bmap vp L L L
386
387 vop_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
400 vop_strategy {
401 IN struct vnode *vp;
402 IN struct buf *bp;
403 };
404
405
406 %% getwritemount vp = = =
407
408 vop_getwritemount {
409 IN struct vnode *vp;
410 OUT struct mount **mpp;
411 };
412
413
414 %% print vp - - -
415
416 vop_print {
417 IN struct vnode *vp;
418 };
419
420
421 %% pathconf vp L L L
422
423 vop_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
432 vop_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 %% advlockasync vp U U U
442
443 vop_advlockasync {
444 IN struct vnode *vp;
445 IN void *id;
446 IN int op;
447 IN struct flock *fl;
448 IN int flags;
449 IN struct task *task;
450 INOUT void **cookiep;
451 };
452
453
454 %% advlockpurge vp E E E
455
456 vop_advlockpurge {
457 IN struct vnode *vp;
458 };
459
460
461 %% reallocblks vp E E E
462
463 vop_reallocblks {
464 IN struct vnode *vp;
465 IN struct cluster_save *buflist;
466 };
467
468
469 %% getpages vp L L L
470
471 vop_getpages {
472 IN struct vnode *vp;
473 IN vm_page_t *m;
474 IN int count;
475 IN int reqpage;
476 IN vm_ooffset_t offset;
477 };
478
479
480 %% putpages vp E E E
481
482 vop_putpages {
483 IN struct vnode *vp;
484 IN vm_page_t *m;
485 IN int count;
486 IN int sync;
487 IN int *rtvals;
488 IN vm_ooffset_t offset;
489 };
490
491
492 %% getacl vp L L L
493
494 vop_getacl {
495 IN struct vnode *vp;
496 IN acl_type_t type;
497 OUT struct acl *aclp;
498 IN struct ucred *cred;
499 IN struct thread *td;
500 };
501
502
503 %% setacl vp E E E
504
505 vop_setacl {
506 IN struct vnode *vp;
507 IN acl_type_t type;
508 IN struct acl *aclp;
509 IN struct ucred *cred;
510 IN struct thread *td;
511 };
512
513
514 %% aclcheck vp = = =
515
516 vop_aclcheck {
517 IN struct vnode *vp;
518 IN acl_type_t type;
519 IN struct acl *aclp;
520 IN struct ucred *cred;
521 IN struct thread *td;
522 };
523
524
525 %% closeextattr vp L L L
526
527 vop_closeextattr {
528 IN struct vnode *vp;
529 IN int commit;
530 IN struct ucred *cred;
531 IN struct thread *td;
532 };
533
534
535 %% getextattr vp L L L
536
537 vop_getextattr {
538 IN struct vnode *vp;
539 IN int attrnamespace;
540 IN const char *name;
541 INOUT struct uio *uio;
542 OUT size_t *size;
543 IN struct ucred *cred;
544 IN struct thread *td;
545 };
546
547
548 %% listextattr vp L L L
549
550 vop_listextattr {
551 IN struct vnode *vp;
552 IN int attrnamespace;
553 INOUT struct uio *uio;
554 OUT size_t *size;
555 IN struct ucred *cred;
556 IN struct thread *td;
557 };
558
559
560 %% openextattr vp L L L
561
562 vop_openextattr {
563 IN struct vnode *vp;
564 IN struct ucred *cred;
565 IN struct thread *td;
566 };
567
568
569 %% deleteextattr vp E E E
570 %! deleteextattr post vop_deleteextattr_post
571
572 vop_deleteextattr {
573 IN struct vnode *vp;
574 IN int attrnamespace;
575 IN const char *name;
576 IN struct ucred *cred;
577 IN struct thread *td;
578 };
579
580
581 %% setextattr vp E E E
582 %! setextattr post vop_setextattr_post
583
584 vop_setextattr {
585 IN struct vnode *vp;
586 IN int attrnamespace;
587 IN const char *name;
588 INOUT struct uio *uio;
589 IN struct ucred *cred;
590 IN struct thread *td;
591 };
592
593
594 %% setlabel vp E E E
595
596 vop_setlabel {
597 IN struct vnode *vp;
598 IN struct label *label;
599 IN struct ucred *cred;
600 IN struct thread *td;
601 };
602
603
604 %% vptofh vp = = =
605
606 vop_vptofh {
607 IN struct vnode *vp;
608 IN struct fid *fhp;
609 };
610
611
612 %% vptocnp vp L L L
613 %% vptocnp vpp - U -
614
615 vop_vptocnp {
616 IN struct vnode *vp;
617 OUT struct vnode **vpp;
618 IN struct ucred *cred;
619 INOUT char *buf;
620 INOUT int *buflen;
621 };
622
623
624 %% allocate vp E E E
625
626 vop_allocate {
627 IN struct vnode *vp;
628 INOUT off_t *offset;
629 INOUT off_t *len;
630 };
631
632 %% advise vp U U U
633
634 vop_advise {
635 IN struct vnode *vp;
636 IN off_t start;
637 IN off_t end;
638 IN int advice;
639 };
640
641 %% unp_bind vp E E E
642
643 vop_unp_bind {
644 IN struct vnode *vp;
645 IN struct socket *socket;
646 };
647
648 %% unp_connect vp L L L
649
650 vop_unp_connect {
651 IN struct vnode *vp;
652 OUT struct socket **socket;
653 };
654
655 %% unp_detach vp = = =
656
657 vop_unp_detach {
658 IN struct vnode *vp;
659 };
660
661 %% is_text vp L L L
662
663 vop_is_text {
664 IN struct vnode *vp;
665 };
666
667 %% set_text vp E E E
668
669 vop_set_text {
670 IN struct vnode *vp;
671 };
672
673 %% vop_unset_text vp E E E
674
675 vop_unset_text {
676 IN struct vnode *vp;
677 };
678
679 %% get_writecount vp L L L
680
681 vop_get_writecount {
682 IN struct vnode *vp;
683 OUT int *writecount;
684 };
685
686 %% add_writecount vp E E E
687
688 vop_add_writecount {
689 IN struct vnode *vp;
690 IN int inc;
691 };
692
693 # The VOPs below are spares at the end of the table to allow new VOPs to be
694 # added in stable branches without breaking the KBI. New VOPs in HEAD should
695 # be added above these spares. When merging a new VOP to a stable branch,
696 # the new VOP should replace one of the spares.
697
698 vop_spare1 {
699 IN struct vnode *vp;
700 };
701
702 vop_spare2 {
703 IN struct vnode *vp;
704 };
705
706 vop_spare3 {
707 IN struct vnode *vp;
708 };
709
710 vop_spare4 {
711 IN struct vnode *vp;
712 };
713
714 vop_spare5 {
715 IN struct vnode *vp;
716 };
Cache object: 8f728957f15a063f24a7a030550cb497
|