]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/kern/vnode_if.src
This commit was generated by cvs2svn to compensate for changes in r175296,
[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 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         IN struct thread *td;
65 };
66
67 %% lookup       dvp     L ? ?
68 %% lookup       vpp     - L -
69 %! lookup       pre     vop_lookup_pre
70 %! lookup       post    vop_lookup_post
71
72 # XXX - the lookup locking protocol defies simple description and depends
73 #       on the flags and operation fields in the (cnp) structure.  Note
74 #       especially that *vpp may equal dvp and both may be locked.
75
76 vop_lookup {
77         IN struct vnode *dvp;
78         INOUT struct vnode **vpp;
79         IN struct componentname *cnp;
80 };
81
82 %% cachedlookup dvp     L ? ?
83 %% cachedlookup vpp     - L -
84
85 # This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
86
87 vop_cachedlookup {
88         IN struct vnode *dvp;
89         INOUT struct vnode **vpp;
90         IN struct componentname *cnp;
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
128 vop_open {
129         IN struct vnode *vp;
130         IN int mode;
131         IN struct ucred *cred;
132         IN struct thread *td;
133         IN struct file *fp;
134 };
135
136
137 %% close        vp      E E E
138
139 vop_close {
140         IN struct vnode *vp;
141         IN int fflag;
142         IN struct ucred *cred;
143         IN struct thread *td;
144 };
145
146
147 %% access       vp      L L L
148
149 vop_access {
150         IN struct vnode *vp;
151         IN int mode;
152         IN struct ucred *cred;
153         IN struct thread *td;
154 };
155
156
157 %% getattr      vp      L L L
158
159 vop_getattr {
160         IN struct vnode *vp;
161         OUT struct vattr *vap;
162         IN struct ucred *cred;
163         IN struct thread *td;
164 };
165
166
167 %% setattr      vp      E E E
168 %! setattr      post    vop_setattr_post
169
170 vop_setattr {
171         IN struct vnode *vp;
172         IN struct vattr *vap;
173         IN struct ucred *cred;
174         IN struct thread *td;
175 };
176
177
178 %% read         vp      L L L
179
180 vop_read {
181         IN struct vnode *vp;
182         INOUT struct uio *uio;
183         IN int ioflag;
184         IN struct ucred *cred;
185 };
186
187
188 %% write        vp      E E E
189 %! write        pre     VOP_WRITE_PRE
190 %! write        post    VOP_WRITE_POST
191
192 vop_write {
193         IN struct vnode *vp;
194         INOUT struct uio *uio;
195         IN int ioflag;
196         IN struct ucred *cred;
197 };
198
199
200 %% lease        vp      = = =
201
202 vop_lease {
203         IN struct vnode *vp;
204         IN struct thread *td;
205         IN struct ucred *cred;
206         IN int flag;
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      E E E
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 %% reallocblks  vp      E E E
442
443 vop_reallocblks {
444         IN struct vnode *vp;
445         IN struct cluster_save *buflist;
446 };
447
448
449 %% getpages     vp      L L L
450
451 vop_getpages {
452         IN struct vnode *vp;
453         IN vm_page_t *m;
454         IN int count;
455         IN int reqpage;
456         IN vm_ooffset_t offset;
457 };
458
459
460 %% putpages     vp      E E E
461
462 vop_putpages {
463         IN struct vnode *vp;
464         IN vm_page_t *m;
465         IN int count;
466         IN int sync;
467         IN int *rtvals;
468         IN vm_ooffset_t offset;
469 };
470
471
472 %% getacl       vp      L L L
473
474 vop_getacl {
475         IN struct vnode *vp;
476         IN acl_type_t type;
477         OUT struct acl *aclp;
478         IN struct ucred *cred;
479         IN struct thread *td;
480 };
481
482
483 %% setacl       vp      E E E
484
485 vop_setacl {
486         IN struct vnode *vp;
487         IN acl_type_t type;
488         IN struct acl *aclp;
489         IN struct ucred *cred;
490         IN struct thread *td;
491 };
492
493
494 %% aclcheck     vp      = = =
495
496 vop_aclcheck {
497         IN struct vnode *vp;
498         IN acl_type_t type;
499         IN struct acl *aclp;
500         IN struct ucred *cred;
501         IN struct thread *td;
502 };
503
504
505 %% closeextattr vp      L L L
506
507 vop_closeextattr {
508         IN struct vnode *vp;
509         IN int commit;
510         IN struct ucred *cred;
511         IN struct thread *td;
512 };
513
514
515 %% getextattr   vp      L L L
516
517 vop_getextattr {
518         IN struct vnode *vp;
519         IN int attrnamespace;
520         IN const char *name;
521         INOUT struct uio *uio;
522         OUT size_t *size;
523         IN struct ucred *cred;
524         IN struct thread *td;
525 };
526
527
528 %% listextattr  vp      L L L
529
530 vop_listextattr {
531         IN struct vnode *vp;
532         IN int attrnamespace;
533         INOUT struct uio *uio;
534         OUT size_t *size;
535         IN struct ucred *cred;
536         IN struct thread *td;
537 };
538
539
540 %% openextattr  vp      L L L
541
542 vop_openextattr {
543         IN struct vnode *vp;
544         IN struct ucred *cred;
545         IN struct thread *td;
546 };
547
548
549 %% deleteextattr        vp      E E E
550
551 vop_deleteextattr {
552         IN struct vnode *vp;
553         IN int attrnamespace;
554         IN const char *name;
555         IN struct ucred *cred;
556         IN struct thread *td;
557 };
558
559
560 %% setextattr   vp      E E E
561
562 vop_setextattr {
563         IN struct vnode *vp;
564         IN int attrnamespace;
565         IN const char *name;
566         INOUT struct uio *uio;
567         IN struct ucred *cred;
568         IN struct thread *td;
569 };
570
571
572 %% setlabel     vp      E E E
573
574 vop_setlabel {
575         IN struct vnode *vp;
576         IN struct label *label;
577         IN struct ucred *cred;
578         IN struct thread *td;
579 };
580
581
582 %% setlabel     vp      = = =
583
584 vop_vptofh {
585         IN struct vnode *vp;
586         IN struct fid *fhp;
587 };