]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/kern/vnode_if.src
This commit was generated by cvs2svn to compensate for changes in r157191,
[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     E E E
97 #% create       vpp     - L -
98 #! create       post    vop_create_post
99 #
100 vop_create {
101         IN struct vnode *dvp;
102         OUT struct vnode **vpp;
103         IN struct componentname *cnp;
104         IN struct vattr *vap;
105 };
106
107 #
108 #% whiteout     dvp     E E E
109 #
110 vop_whiteout {
111         IN struct vnode *dvp;
112         IN struct componentname *cnp;
113         IN int flags;
114 };
115
116 #
117 #% mknod        dvp     E E E
118 #% mknod        vpp     - L -
119 #! mknod        post    vop_mknod_post
120 #
121 vop_mknod {
122         IN struct vnode *dvp;
123         OUT struct vnode **vpp;
124         IN struct componentname *cnp;
125         IN struct vattr *vap;
126 };
127
128 #
129 #% open         vp      L L L
130 #
131 vop_open {
132         IN struct vnode *vp;
133         IN int mode;
134         IN struct ucred *cred;
135         IN struct thread *td;
136         IN int fdidx;
137 };
138
139 #
140 #% close        vp      E E E
141 #
142 vop_close {
143         IN struct vnode *vp;
144         IN int fflag;
145         IN struct ucred *cred;
146         IN struct thread *td;
147 };
148
149 #
150 #% access       vp      L L L
151 #
152 vop_access {
153         IN struct vnode *vp;
154         IN int mode;
155         IN struct ucred *cred;
156         IN struct thread *td;
157 };
158
159 #
160 #% getattr      vp      L L L
161 #
162 vop_getattr {
163         IN struct vnode *vp;
164         OUT struct vattr *vap;
165         IN struct ucred *cred;
166         IN struct thread *td;
167 };
168
169 #
170 #% setattr      vp      E E E
171 #! setattr      post    vop_setattr_post
172 #
173 vop_setattr {
174         IN struct vnode *vp;
175         IN struct vattr *vap;
176         IN struct ucred *cred;
177         IN struct thread *td;
178 };
179
180 #
181 #% read         vp      L L L
182 #
183 vop_read {
184         IN struct vnode *vp;
185         INOUT struct uio *uio;
186         IN int ioflag;
187         IN struct ucred *cred;
188 };
189
190 #
191 #% write        vp      E E E
192 #! write        pre     VOP_WRITE_PRE
193 #! write        post    VOP_WRITE_POST
194 #
195 vop_write {
196         IN struct vnode *vp;
197         INOUT struct uio *uio;
198         IN int ioflag;
199         IN struct ucred *cred;
200 };
201
202 #
203 #% lease        vp      = = =
204 #
205 vop_lease {
206         IN struct vnode *vp;
207         IN struct thread *td;
208         IN struct ucred *cred;
209         IN int flag;
210 };
211
212 #
213 #% ioctl        vp      U U U
214 #
215 vop_ioctl {
216         IN struct vnode *vp;
217         IN u_long command;
218         IN void *data;
219         IN int fflag;
220         IN struct ucred *cred;
221         IN struct thread *td;
222 };
223
224 #
225 #% poll vp      U U U
226 #
227 vop_poll {
228         IN struct vnode *vp;
229         IN int events;
230         IN struct ucred *cred;
231         IN struct thread *td;
232 };
233
234 #
235 #% kqfilter     vp      U U U
236 #
237 vop_kqfilter {
238         IN struct vnode *vp;
239         IN struct knote *kn;
240 };
241
242 #
243 #% revoke       vp      L L L
244 #
245 vop_revoke {
246         IN struct vnode *vp;
247         IN int flags;
248 };
249
250 #
251 #% fsync        vp      E E E
252 #
253 vop_fsync {
254         IN struct vnode *vp;
255         IN int waitfor;
256         IN struct thread *td;
257 };
258
259 #
260 #% remove       dvp     E E E
261 #% remove       vp      E E E
262 #! remove       post    vop_remove_post
263 #
264 vop_remove {
265         IN struct vnode *dvp;
266         IN struct vnode *vp;
267         IN struct componentname *cnp;
268 };
269
270 #
271 #% link         tdvp    E E E
272 #% link         vp      E E E
273 #! link         post    vop_link_post
274 #
275 vop_link {
276         IN struct vnode *tdvp;
277         IN struct vnode *vp;
278         IN struct componentname *cnp;
279 };
280
281 #
282 # rename        fdvp    U U U
283 # rename        fvp     U U U
284 # rename        tdvp    E U U
285 # rename        tvp     X U U
286 #! rename       pre     vop_rename_pre
287 #! rename       post    vop_rename_post
288 #
289 vop_rename {
290         IN WILLRELE struct vnode *fdvp;
291         IN WILLRELE struct vnode *fvp;
292         IN struct componentname *fcnp;
293         IN WILLRELE struct vnode *tdvp;
294         IN WILLRELE struct vnode *tvp;
295         IN struct componentname *tcnp;
296 };
297
298 #
299 #% mkdir        dvp     E E E
300 #% mkdir        vpp     - E -
301 #! mkdir        post    vop_mkdir_post
302 #
303 vop_mkdir {
304         IN struct vnode *dvp;
305         OUT struct vnode **vpp;
306         IN struct componentname *cnp;
307         IN struct vattr *vap;
308 };
309
310 #
311 #% rmdir        dvp     E E E
312 #% rmdir        vp      E E E
313 #! rmdir        post    vop_rmdir_post
314 #
315 vop_rmdir {
316         IN struct vnode *dvp;
317         IN struct vnode *vp;
318         IN struct componentname *cnp;
319 };
320
321 #
322 #% symlink      dvp     E E E
323 #% symlink      vpp     - E -
324 #! symlink      post    vop_symlink_post
325 #
326 vop_symlink {
327         IN struct vnode *dvp;
328         OUT struct vnode **vpp;
329         IN struct componentname *cnp;
330         IN struct vattr *vap;
331         IN char *target;
332 };
333
334 #
335 #% readdir      vp      L L L
336 #
337 vop_readdir {
338         IN struct vnode *vp;
339         INOUT struct uio *uio;
340         IN struct ucred *cred;
341         INOUT int *eofflag;
342         OUT int *ncookies;
343         INOUT u_long **cookies;
344 };
345
346 #
347 #% readlink     vp      L L L
348 #
349 vop_readlink {
350         IN struct vnode *vp;
351         INOUT struct uio *uio;
352         IN struct ucred *cred;
353 };
354
355 #
356 #% inactive     vp      E E E
357 #
358 vop_inactive {
359         IN struct vnode *vp;
360         IN struct thread *td;
361 };
362
363 #
364 #% reclaim      vp      E E E
365 #
366 vop_reclaim {
367         IN struct vnode *vp;
368         IN struct thread *td;
369 };
370
371 #
372 #lock           vp      ? ? ?
373 #! lock         pre     vop_lock_pre
374 #! lock         post    vop_lock_post
375 #
376 vop_lock {
377         IN struct vnode *vp;
378         IN int flags;
379         IN struct thread *td;
380 };
381
382 #
383 #unlock         vp      L ? L
384 #! unlock       pre     vop_unlock_pre
385 #! unlock       post    vop_unlock_post
386 #
387 vop_unlock {
388         IN struct vnode *vp;
389         IN int flags;
390         IN struct thread *td;
391 };
392
393 #
394 #% bmap         vp      L L L
395 #
396 vop_bmap {
397         IN struct vnode *vp;
398         IN daddr_t bn;
399         OUT struct bufobj **bop;
400         IN daddr_t *bnp;
401         OUT int *runp;
402         OUT int *runb;
403 };
404
405 #
406 # strategy      vp      L L L
407 #! strategy     pre     vop_strategy_pre
408 #
409 vop_strategy {
410         IN struct vnode *vp;
411         IN struct buf *bp;
412 };
413
414 #
415 #% getwritemount vp     = = =
416 #
417 vop_getwritemount {
418         IN struct vnode *vp;
419         OUT struct mount **mpp;
420 };
421
422 #
423 #% print        vp      = = =
424 #
425 vop_print {
426         IN struct vnode *vp;
427 };
428
429 #
430 #% pathconf     vp      L L L
431 #
432 vop_pathconf {
433         IN struct vnode *vp;
434         IN int name;
435         OUT register_t *retval;
436 };
437
438 #
439 #% advlock      vp      U U U
440 #
441 vop_advlock {
442         IN struct vnode *vp;
443         IN void *id;
444         IN int op;
445         IN struct flock *fl;
446         IN int flags;
447 };
448
449 #
450 #% reallocblks  vp      E E E
451 #
452 vop_reallocblks {
453         IN struct vnode *vp;
454         IN struct cluster_save *buflist;
455 };
456
457 #
458 #% getpages     vp      L L L
459 #
460 vop_getpages {
461         IN struct vnode *vp;
462         IN vm_page_t *m;
463         IN int count;
464         IN int reqpage;
465         IN vm_ooffset_t offset;
466 };
467
468 #
469 #% putpages     vp      E E E
470 #
471 vop_putpages {
472         IN struct vnode *vp;
473         IN vm_page_t *m;
474         IN int count;
475         IN int sync;
476         IN int *rtvals;
477         IN vm_ooffset_t offset;
478 };
479
480 #
481 #% getacl       vp      L L L
482 #
483 vop_getacl {
484         IN struct vnode *vp;
485         IN acl_type_t type;
486         OUT struct acl *aclp;
487         IN struct ucred *cred;
488         IN struct thread *td;
489 };
490
491 #
492 #% setacl       vp      E E E
493 #
494 vop_setacl {
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 #% aclcheck     vp      = = =
504 #
505 vop_aclcheck {
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 #% closeextattr vp      L L L
515 #
516 vop_closeextattr {
517         IN struct vnode *vp;
518         IN int commit;
519         IN struct ucred *cred;
520         IN struct thread *td;
521 };
522
523 #
524 #% getextattr   vp      L L L
525 #
526 vop_getextattr {
527         IN struct vnode *vp;
528         IN int attrnamespace;
529         IN const char *name;
530         INOUT struct uio *uio;
531         OUT size_t *size;
532         IN struct ucred *cred;
533         IN struct thread *td;
534 };
535
536 #
537 #% listextattr  vp      L L L
538 #
539 vop_listextattr {
540         IN struct vnode *vp;
541         IN int attrnamespace;
542         INOUT struct uio *uio;
543         OUT size_t *size;
544         IN struct ucred *cred;
545         IN struct thread *td;
546 };
547
548 #
549 #% openextattr  vp      L L L
550 #
551 vop_openextattr {
552         IN struct vnode *vp;
553         IN struct ucred *cred;
554         IN struct thread *td;
555 };
556
557 #
558 #% deleteextattr        vp      E E E
559 #
560 vop_deleteextattr {
561         IN struct vnode *vp;
562         IN int attrnamespace;
563         IN const char *name;
564         IN struct ucred *cred;
565         IN struct thread *td;
566 };
567
568 #
569 #% setextattr   vp      E E E
570 #
571 vop_setextattr {
572         IN struct vnode *vp;
573         IN int attrnamespace;
574         IN const char *name;
575         INOUT struct uio *uio;
576         IN struct ucred *cred;
577         IN struct thread *td;
578 };
579
580 #
581 #% setlabel     vp      E E E
582 #
583 vop_setlabel {
584         IN struct vnode *vp;
585         IN struct label *label;
586         IN struct ucred *cred;
587         IN struct thread *td;
588 };