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$
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 struct thread *td;
372 IN char *file;
373 IN int line;
374 };
375
376
377 %! unlock pre vop_unlock_pre
378 %! unlock post vop_unlock_post
379
380 vop_unlock {
381 IN struct vnode *vp;
382 IN int flags;
383 IN struct thread *td;
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 %% reallocblks vp E E E
444
445 vop_reallocblks {
446 IN struct vnode *vp;
447 IN struct cluster_save *buflist;
448 };
449
450
451 %% getpages vp L L L
452
453 vop_getpages {
454 IN struct vnode *vp;
455 IN vm_page_t *m;
456 IN int count;
457 IN int reqpage;
458 IN vm_ooffset_t offset;
459 };
460
461
462 %% putpages vp E E E
463
464 vop_putpages {
465 IN struct vnode *vp;
466 IN vm_page_t *m;
467 IN int count;
468 IN int sync;
469 IN int *rtvals;
470 IN vm_ooffset_t offset;
471 };
472
473
474 %% getacl vp L L L
475
476 vop_getacl {
477 IN struct vnode *vp;
478 IN acl_type_t type;
479 OUT struct acl *aclp;
480 IN struct ucred *cred;
481 IN struct thread *td;
482 };
483
484
485 %% setacl vp E E E
486
487 vop_setacl {
488 IN struct vnode *vp;
489 IN acl_type_t type;
490 IN struct acl *aclp;
491 IN struct ucred *cred;
492 IN struct thread *td;
493 };
494
495
496 %% aclcheck vp = = =
497
498 vop_aclcheck {
499 IN struct vnode *vp;
500 IN acl_type_t type;
501 IN struct acl *aclp;
502 IN struct ucred *cred;
503 IN struct thread *td;
504 };
505
506
507 %% closeextattr vp L L L
508
509 vop_closeextattr {
510 IN struct vnode *vp;
511 IN int commit;
512 IN struct ucred *cred;
513 IN struct thread *td;
514 };
515
516
517 %% getextattr vp L L L
518
519 vop_getextattr {
520 IN struct vnode *vp;
521 IN int attrnamespace;
522 IN const char *name;
523 INOUT struct uio *uio;
524 OUT size_t *size;
525 IN struct ucred *cred;
526 IN struct thread *td;
527 };
528
529
530 %% listextattr vp L L L
531
532 vop_listextattr {
533 IN struct vnode *vp;
534 IN int attrnamespace;
535 INOUT struct uio *uio;
536 OUT size_t *size;
537 IN struct ucred *cred;
538 IN struct thread *td;
539 };
540
541
542 %% openextattr vp L L L
543
544 vop_openextattr {
545 IN struct vnode *vp;
546 IN struct ucred *cred;
547 IN struct thread *td;
548 };
549
550
551 %% deleteextattr vp E E E
552
553 vop_deleteextattr {
554 IN struct vnode *vp;
555 IN int attrnamespace;
556 IN const char *name;
557 IN struct ucred *cred;
558 IN struct thread *td;
559 };
560
561
562 %% setextattr vp E E E
563
564 vop_setextattr {
565 IN struct vnode *vp;
566 IN int attrnamespace;
567 IN const char *name;
568 INOUT struct uio *uio;
569 IN struct ucred *cred;
570 IN struct thread *td;
571 };
572
573
574 %% setlabel vp E E E
575
576 vop_setlabel {
577 IN struct vnode *vp;
578 IN struct label *label;
579 IN struct ucred *cred;
580 IN struct thread *td;
581 };
582
583
584 %% setlabel vp = = =
585
586 vop_vptofh {
587 IN struct vnode *vp;
588 IN struct fid *fhp;
589 };
Cache object: 2f01a161ec1327a313b31a5b8da29fa1
|