FreeBSD/Linux Kernel Cross Reference
sys/kern/vnode_if.src
1 # $NetBSD: vnode_if.src,v 1.84 2022/05/03 08:33:59 hannken Exp $
2 #
3 # Copyright (c) 1992, 1993
4 # The Regents of the University of California. All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 # 3. Neither the name of the University nor the names of its contributors
15 # may be used to endorse or promote products derived from this software
16 # without specific prior written permission.
17 #
18 # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 # SUCH DAMAGE.
29 #
30 # @(#)vnode_if.src 8.14 (Berkeley) 8/6/95
31 #
32 #
33
34 #
35 # Above each of the vop descriptors is a specification of the locking
36 # protocol used by each vop call. The first column is the name of
37 # the variable, the remaining three columns are in, out and error
38 # respectively. The "in" column defines the lock state on input,
39 # the "out" column defines the state on successful return, and the
40 # "error" column defines the locking state on error exit.
41 #
42 # The locking value can take the following values:
43 # L: locked.
44 # U: unlocked.
45 # -: not applicable. vnode does not yet (or no longer) exists.
46 # =: the same on input and output, may be either L or U.
47 # X: locked if not nil.
48 #
49 # For operations other than VOP_LOOKUP which require a component name
50 # parameter, the flags required for the initial namei() call are listed.
51 # Additional flags may be added to the namei() call, but these are required.
52 #
53
54 #
55 #% bwrite vp = = =
56 #
57 vop_bwrite {
58 IN struct vnode *vp;
59 IN struct buf *bp;
60 };
61
62 #
63 #% parsepath dvp = = =
64 #
65 vop_parsepath {
66 FSTRANS=NO
67 IN struct vnode *dvp;
68 IN const char *name;
69 OUT size_t *retval;
70 };
71
72 #
73 #% lookup dvp L L L
74 #% lookup vpp - U -
75 #
76 # Note especially that *vpp may equal dvp.
77 #
78 # More details:
79 # All lookups find the named node (creating the vnode if needed) and
80 # return it, referenced and unlocked, in *vpp.
81 # On failure, *vpp is NULL, and *dvp is left locked.
82 #
83 vop_lookup {
84 VERSION 2
85 IN LOCKED=YES struct vnode *dvp;
86 OUT WILLMAKE struct vnode **vpp;
87 IN struct componentname *cnp;
88 };
89
90 #
91 #% create dvp L L L
92 #% create vpp - U -
93 #
94 #! create cnp CREATE, LOCKPARENT
95 #
96 vop_create {
97 VERSION 3
98 POST=vop_create_post
99 IN LOCKED=EXCL struct vnode *dvp;
100 OUT WILLMAKE struct vnode **vpp;
101 IN struct componentname *cnp;
102 IN struct vattr *vap;
103 };
104
105 #
106 #% mknod dvp L L L
107 #% mknod vpp - U -
108 #
109 #! mknod cnp CREATE, LOCKPARENT
110 #
111 vop_mknod {
112 VERSION 3
113 POST=vop_mknod_post
114 IN LOCKED=EXCL struct vnode *dvp;
115 OUT WILLMAKE struct vnode **vpp;
116 IN struct componentname *cnp;
117 IN struct vattr *vap;
118 };
119
120 #
121 #% open vp L L L
122 #
123 vop_open {
124 POST=vop_open_post
125 IN LOCKED=YES struct vnode *vp;
126 IN int mode;
127 IN kauth_cred_t cred;
128 };
129
130 #
131 #% close vp L L L
132 #
133 vop_close {
134 POST=vop_close_post
135 IN LOCKED=YES struct vnode *vp;
136 IN int fflag;
137 IN kauth_cred_t cred;
138 };
139
140 #
141 #% access vp L L L
142 #
143 vop_access {
144 IN LOCKED=YES struct vnode *vp;
145 IN accmode_t accmode;
146 IN kauth_cred_t cred;
147 };
148
149 #
150 #% accessx vp L L L
151 #
152 vop_accessx {
153 IN LOCKED=YES struct vnode *vp;
154 IN accmode_t accmode;
155 IN kauth_cred_t cred;
156 };
157
158 #
159 #% getattr vp L L L
160 #
161 vop_getattr {
162 IN LOCKED=YES struct vnode *vp;
163 IN struct vattr *vap;
164 IN kauth_cred_t cred;
165 };
166
167 #
168 #% setattr vp L L L
169 #
170 vop_setattr {
171 PRE=vop_setattr_pre
172 POST=vop_setattr_post
173 IN LOCKED=EXCL struct vnode *vp;
174 IN struct vattr *vap;
175 IN kauth_cred_t cred;
176 };
177
178 #
179 #% read vp L L L
180 #
181 vop_read {
182 POST=vop_read_post
183 IN LOCKED=YES struct vnode *vp;
184 INOUT struct uio *uio;
185 IN int ioflag;
186 IN kauth_cred_t cred;
187 };
188
189 #
190 #% write vp L L L
191 #
192 vop_write {
193 PRE=vop_write_pre
194 POST=vop_write_post
195 IN LOCKED=YES struct vnode *vp;
196 INOUT struct uio *uio;
197 IN int ioflag;
198 IN kauth_cred_t cred;
199 };
200
201 #
202 #% fallocate vp L L L
203 #
204 vop_fallocate {
205 IN LOCKED=YES struct vnode *vp;
206 IN off_t pos;
207 IN off_t len;
208 };
209
210 #
211 #% fdiscard vp L L L
212 #
213 vop_fdiscard {
214 IN LOCKED=YES struct vnode *vp;
215 IN off_t pos;
216 IN off_t len;
217 };
218
219 #
220 #% ioctl vp U U U
221 #
222 vop_ioctl {
223 FSTRANS=NO
224 IN LOCKED=NO struct vnode *vp;
225 IN u_long command;
226 IN void *data;
227 IN int fflag;
228 IN kauth_cred_t cred;
229 };
230
231 #
232 #% fcntl vp U U U
233 #
234 vop_fcntl {
235 FSTRANS=NO
236 IN LOCKED=NO struct vnode *vp;
237 IN u_int command;
238 IN void *data;
239 IN int fflag;
240 IN kauth_cred_t cred;
241 };
242
243 #
244 #% poll vp U U U
245 #
246 vop_poll {
247 IN LOCKED=NO struct vnode *vp;
248 IN int events;
249 };
250
251 #
252 #% kqfilter vp U U U
253 #
254 vop_kqfilter {
255 IN LOCKED=NO struct vnode *vp;
256 IN struct knote *kn;
257 };
258
259 #
260 #% revoke vp U U U
261 #
262 vop_revoke {
263 FSTRANS=NO
264 IN LOCKED=NO struct vnode *vp;
265 IN int flags;
266 };
267
268 #
269 #% mmap vp = = =
270 #
271 vop_mmap {
272 IN struct vnode *vp;
273 IN vm_prot_t prot;
274 IN kauth_cred_t cred;
275 };
276
277 #
278 #% fsync vp L L L
279 #
280 vop_fsync {
281 IN LOCKED=YES struct vnode *vp;
282 IN kauth_cred_t cred;
283 IN int flags;
284 IN off_t offlo;
285 IN off_t offhi;
286 };
287
288 #
289 # Needs work: Is newoff right? What's it mean?
290 # XXX Locking protocol?
291 #
292 vop_seek {
293 IN struct vnode *vp;
294 IN off_t oldoff;
295 IN off_t newoff;
296 IN kauth_cred_t cred;
297 };
298
299 #
300 #% remove dvp L L L
301 #% remove vp L U U
302 #
303 #! remove cnp DELETE, LOCKPARENT | LOCKLEAF
304 #
305 vop_remove {
306 VERSION 3
307 PRE=vop_remove_pre
308 POST=vop_remove_post
309 IN LOCKED=EXCL struct vnode *dvp;
310 IN LOCKED=YES WILLPUT struct vnode *vp;
311 IN struct componentname *cnp;
312 CONTEXT nlink_t vp_new_nlink;
313 };
314
315 #
316 #% link dvp L L L
317 #% link vp U U U
318 #
319 #! link cnp CREATE, LOCKPARENT
320 #
321 vop_link {
322 VERSION 2
323 POST=vop_link_post
324 IN LOCKED=EXCL struct vnode *dvp;
325 IN LOCKED=NO struct vnode *vp;
326 IN struct componentname *cnp;
327 };
328
329 #
330 #% rename fdvp U U U
331 #% rename fvp U U U
332 #% rename tdvp L U U
333 #% rename tvp X U U
334 #
335 #! rename fcnp DELETE, LOCKPARENT
336 #! rename tcnp RENAME, LOCKPARENT | LOCKLEAF | NOCACHE
337 #
338 vop_rename {
339 IN WILLRELE struct vnode *fdvp;
340 IN WILLRELE struct vnode *fvp;
341 IN struct componentname *fcnp;
342 IN LOCKED=YES WILLPUT struct vnode *tdvp;
343 IN WILLPUT struct vnode *tvp;
344 IN struct componentname *tcnp;
345 };
346
347 #
348 #% mkdir dvp L L L
349 #% mkdir vpp - U -
350 #
351 #! mkdir cnp CREATE, LOCKPARENT
352 #
353 vop_mkdir {
354 VERSION 3
355 POST=vop_mkdir_post
356 IN LOCKED=EXCL struct vnode *dvp;
357 OUT WILLMAKE struct vnode **vpp;
358 IN struct componentname *cnp;
359 IN struct vattr *vap;
360 };
361
362 #
363 #% rmdir dvp L L L
364 #% rmdir vp L U U
365 #
366 #! rmdir cnp DELETE, LOCKPARENT | LOCKLEAF
367 #
368 vop_rmdir {
369 VERSION 2
370 PRE=vop_rmdir_pre
371 POST=vop_rmdir_post
372 IN LOCKED=EXCL struct vnode *dvp;
373 IN LOCKED=EXCL WILLPUT struct vnode *vp;
374 IN struct componentname *cnp;
375 };
376
377 #
378 #% symlink dvp L L L
379 #% symlink vpp - U -
380 #
381 #! symlink cnp CREATE, LOCKPARENT
382 #
383 vop_symlink {
384 VERSION 3
385 POST=vop_symlink_post
386 IN LOCKED=EXCL struct vnode *dvp;
387 OUT WILLMAKE struct vnode **vpp;
388 IN struct componentname *cnp;
389 IN struct vattr *vap;
390 IN char *target;
391 };
392
393 #
394 #% readdir vp L L L
395 #
396 vop_readdir {
397 IN LOCKED=YES struct vnode *vp;
398 INOUT struct uio *uio;
399 IN kauth_cred_t cred;
400 OUT int *eofflag;
401 OUT off_t **cookies;
402 IN int *ncookies;
403 };
404
405 #
406 #% readlink vp L L L
407 #
408 vop_readlink {
409 IN LOCKED=YES struct vnode *vp;
410 INOUT struct uio *uio;
411 IN kauth_cred_t cred;
412 };
413
414 #
415 #% abortop dvp = = =
416 #
417 #! abortop cnp as appropriate.
418 #
419 vop_abortop {
420 IN struct vnode *dvp;
421 IN struct componentname *cnp;
422 };
423
424 #
425 #% inactive vp L L L
426 #
427 vop_inactive {
428 VERSION 2
429 IN LOCKED=EXCL struct vnode *vp;
430 INOUT bool *recycle;
431 };
432
433 #
434 #% reclaim vp L U U
435 #
436 vop_reclaim {
437 VERSION 2
438 FSTRANS=NO
439 IN LOCKED=EXCL struct vnode *vp;
440 };
441
442 #
443 #% lock vp U L U
444 #
445 vop_lock {
446 FSTRANS=LOCK
447 IN struct vnode *vp;
448 IN int flags;
449 };
450
451 #
452 #% unlock vp L U L
453 #
454 vop_unlock {
455 FSTRANS=UNLOCK
456 IN LOCKED=YES struct vnode *vp;
457 };
458
459 #
460 #% bmap vp = = =
461 #% bmap vpp - U -
462 #
463 vop_bmap {
464 IN struct vnode *vp;
465 IN daddr_t bn;
466 OUT struct vnode **vpp;
467 IN daddr_t *bnp;
468 OUT int *runp;
469 };
470
471 #
472 #% strategy vp = = =
473 #
474 vop_strategy {
475 FSTRANS=NO
476 IN struct vnode *vp;
477 IN struct buf *bp;
478 };
479
480 #
481 #% print vp = = =
482 #
483 vop_print {
484 IN struct vnode *vp;
485 };
486
487 #
488 #% islocked vp = = =
489 #
490 vop_islocked {
491 FSTRANS=NO
492 IN struct vnode *vp;
493 };
494
495 #
496 #% pathconf vp L L L
497 #
498 vop_pathconf {
499 IN LOCKED=YES struct vnode *vp;
500 IN int name;
501 OUT register_t *retval;
502 };
503
504 #
505 #% advlock vp U U U
506 #
507 vop_advlock {
508 FSTRANS=NO
509 IN LOCKED=NO struct vnode *vp;
510 IN void *id;
511 IN int op;
512 IN struct flock *fl;
513 IN int flags;
514 };
515
516 #
517 #% whiteout dvp L L L
518 #% whiteout cnp - - -
519 #% whiteout flag - - -
520 #
521 #! whiteout cnp CREATE, LOCKPARENT
522 #
523 vop_whiteout {
524 IN LOCKED=EXCL struct vnode *dvp;
525 IN struct componentname *cnp;
526 IN int flags;
527 };
528
529 #
530 #% getpages vp = = =
531 #
532 vop_getpages {
533 FSTRANS=NO
534 IN struct vnode *vp;
535 IN voff_t offset;
536 IN struct vm_page **m;
537 IN int *count;
538 IN int centeridx;
539 IN vm_prot_t access_type;
540 IN int advice;
541 IN int flags;
542 };
543
544 #
545 #% putpages vp = = =
546 #
547 vop_putpages {
548 FSTRANS=NO
549 IN struct vnode *vp;
550 IN voff_t offlo;
551 IN voff_t offhi;
552 IN int flags;
553 };
554
555 #
556 #% getacl vp L L L
557 #
558 vop_getacl {
559 IN struct vnode *vp;
560 IN acl_type_t type;
561 OUT struct acl *aclp;
562 IN kauth_cred_t cred;
563 };
564
565 #
566 #% setacl vp L L L
567 #
568 vop_setacl {
569 POST=vop_setacl_post
570 IN LOCKED=EXCL struct vnode *vp;
571 IN acl_type_t type;
572 IN struct acl *aclp;
573 IN kauth_cred_t cred;
574 };
575
576 #
577 #% aclcheck vp = = =
578 #
579 vop_aclcheck {
580 IN struct vnode *vp;
581 IN acl_type_t type;
582 IN struct acl *aclp;
583 IN kauth_cred_t cred;
584 };
585
586 #
587 #% closeextattr vp L L L
588 #
589 vop_closeextattr {
590 IN LOCKED=YES struct vnode *vp;
591 IN int commit;
592 IN kauth_cred_t cred;
593 };
594
595 #
596 #% getextattr vp L L L
597 #
598 vop_getextattr {
599 IN LOCKED=YES struct vnode *vp;
600 IN int attrnamespace;
601 IN const char *name;
602 INOUT struct uio *uio;
603 OUT size_t *size;
604 IN kauth_cred_t cred;
605 };
606
607 #
608 #% listextattr vp L L L
609 #
610 vop_listextattr {
611 IN LOCKED=YES struct vnode *vp;
612 IN int attrnamespace;
613 INOUT struct uio *uio;
614 OUT size_t *size;
615 IN int flag;
616 IN kauth_cred_t cred;
617 };
618
619 #
620 #% openextattr vp L L L
621 #
622 vop_openextattr {
623 IN LOCKED=YES struct vnode *vp;
624 IN kauth_cred_t cred;
625 };
626
627 #
628 #% deleteextattr vp L L L
629 #
630 vop_deleteextattr {
631 IN LOCKED=EXCL struct vnode *vp;
632 IN int attrnamespace;
633 IN const char *name;
634 IN kauth_cred_t cred;
635 };
636
637 #
638 #% setextattr vp L L L
639 #
640 vop_setextattr {
641 IN LOCKED=EXCL struct vnode *vp;
642 IN int attrnamespace;
643 IN const char *name;
644 INOUT struct uio *uio;
645 IN kauth_cred_t cred;
646 };
Cache object: 7517ad43a485629734082de574b72639
|