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