Deleted Added
sdiff udiff text old ( 65119 ) new ( 65770 )
full compact
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# 3. All advertising materials mentioning features or use of this software
14# must display the following acknowledgement:
15# This product includes software developed by the University of
16# California, Berkeley and its contributors.
17# 4. Neither the name of the University nor the names of its contributors
18# may be used to endorse or promote products derived from this software
19# without specific prior written permission.
20#
21# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31# SUCH DAMAGE.
32#
33# @(#)vnode_if.src 8.12 (Berkeley) 5/14/95
34# $FreeBSD: head/sys/kern/vnode_if.src 65770 2000-09-12 09:49:08Z bp $
35#
36
37#
38# Above each of the vop descriptors is a specification of the locking
39# protocol used by each vop call. The first column is the name of
40# the variable, the remaining three columns are in, out and error
41# respectively. The "in" column defines the lock state on input,
42# the "out" column defines the state on succesful return, and the
43# "error" column defines the locking state on error exit.
44#
45# The locking value can take the following values:
46# L: locked; not converted to type of lock.
47# A: any lock type.
48# S: locked with shared lock.
49# E: locked with exclusive lock for this process.
50# O: locked with exclusive lock for other process.
51# U: unlocked.
52# -: not applicable. vnode does not yet (or no longer) exists.
53# =: the same on input and output, may be either L or U.
54# X: locked if not nil.
55#
56
57#
58#% islocked vp = = =
59#
60vop_islocked {
61 IN struct vnode *vp;
62 IN struct proc *p;
63};
64
65#
66#% lookup dvp L ? ?
67#% lookup vpp - L -
68#
69# XXX - the lookup locking protocol defies simple description and depends
70# on the flags and operation fields in the (cnp) structure. Note
71# especially that *vpp may equal dvp and both may be locked.
72#
73vop_lookup {
74 IN struct vnode *dvp;
75 INOUT struct vnode **vpp;
76 IN struct componentname *cnp;
77};
78
79#
80#% cachedlookup dvp L ? ?
81#% cachedlookup vpp - L -
82#
83# This must be an exact copy of lookup. See kern/vfs_cache.c for details.
84#
85vop_cachedlookup {
86 IN struct vnode *dvp;
87 INOUT struct vnode **vpp;
88 IN struct componentname *cnp;
89};
90
91#
92#% create dvp L L L
93#% create vpp - L -
94#
95vop_create {
96 IN struct vnode *dvp;
97 OUT struct vnode **vpp;
98 IN struct componentname *cnp;
99 IN struct vattr *vap;
100};
101
102#
103#% whiteout dvp L L L
104#
105vop_whiteout {
106 IN struct vnode *dvp;
107 IN struct componentname *cnp;
108 IN int flags;
109};
110
111#
112#% mknod dvp L L L
113#% mknod vpp - X -
114#
115vop_mknod {
116 IN struct vnode *dvp;
117 OUT struct vnode **vpp;
118 IN struct componentname *cnp;
119 IN struct vattr *vap;
120};
121
122#
123#% open vp L L L
124#
125vop_open {
126 IN struct vnode *vp;
127 IN int mode;
128 IN struct ucred *cred;
129 IN struct proc *p;
130};
131
132#
133#% close vp U U U
134#
135vop_close {
136 IN struct vnode *vp;
137 IN int fflag;
138 IN struct ucred *cred;
139 IN struct proc *p;
140};
141
142#
143#% access vp L L L
144#
145vop_access {
146 IN struct vnode *vp;
147 IN int mode;
148 IN struct ucred *cred;
149 IN struct proc *p;
150};
151
152#
153#% getattr vp = = =
154#
155vop_getattr {
156 IN struct vnode *vp;
157 OUT struct vattr *vap;
158 IN struct ucred *cred;
159 IN struct proc *p;
160};
161
162#
163#% setattr vp L L L
164#
165vop_setattr {
166 IN struct vnode *vp;
167 IN struct vattr *vap;
168 IN struct ucred *cred;
169 IN struct proc *p;
170};
171
172#
173#% read vp L L L
174#
175vop_read {
176 IN struct vnode *vp;
177 INOUT struct uio *uio;
178 IN int ioflag;
179 IN struct ucred *cred;
180};
181
182#
183#% write vp L L L
184#
185vop_write {
186 IN struct vnode *vp;
187 INOUT struct uio *uio;
188 IN int ioflag;
189 IN struct ucred *cred;
190};
191
192#
193#% lease vp = = =
194#
195vop_lease {
196 IN struct vnode *vp;
197 IN struct proc *p;
198 IN struct ucred *cred;
199 IN int flag;
200};
201
202#
203#% ioctl vp U U U
204#
205vop_ioctl {
206 IN struct vnode *vp;
207 IN u_long command;
208 IN caddr_t data;
209 IN int fflag;
210 IN struct ucred *cred;
211 IN struct proc *p;
212};
213
214#
215#% poll vp U U U
216#
217vop_poll {
218 IN struct vnode *vp;
219 IN int events;
220 IN struct ucred *cred;
221 IN struct proc *p;
222};
223
224#
225#% revoke vp U U U
226#
227vop_revoke {
228 IN struct vnode *vp;
229 IN int flags;
230};
231
232#
233# XXX - not used
234#
235vop_mmap {
236 IN struct vnode *vp;
237 IN int fflags;
238 IN struct ucred *cred;
239 IN struct proc *p;
240};
241
242#
243#% fsync vp L L L
244#
245vop_fsync {
246 IN struct vnode *vp;
247 IN struct ucred *cred;
248 IN int waitfor;
249 IN struct proc *p;
250};
251
252#
253#% remove dvp L L L
254#% remove vp L L L
255#
256vop_remove {
257 IN struct vnode *dvp;
258 IN struct vnode *vp;
259 IN struct componentname *cnp;
260};
261
262#
263#% link tdvp L L L
264#% link vp U U U
265#
266vop_link {
267 IN struct vnode *tdvp;
268 IN struct vnode *vp;
269 IN struct componentname *cnp;
270};
271
272#
273#% rename fdvp U U U
274#% rename fvp U U U
275#% rename tdvp L U U
276#% rename tvp X U U
277#
278vop_rename {
279 IN WILLRELE struct vnode *fdvp;
280 IN WILLRELE struct vnode *fvp;
281 IN struct componentname *fcnp;
282 IN WILLRELE struct vnode *tdvp;
283 IN WILLRELE struct vnode *tvp;
284 IN struct componentname *tcnp;
285};
286
287#
288#% mkdir dvp L L L
289#% mkdir vpp - L -
290#
291vop_mkdir {
292 IN struct vnode *dvp;
293 OUT struct vnode **vpp;
294 IN struct componentname *cnp;
295 IN struct vattr *vap;
296};
297
298#
299#% rmdir dvp L L L
300#% rmdir vp L L L
301#
302vop_rmdir {
303 IN struct vnode *dvp;
304 IN struct vnode *vp;
305 IN struct componentname *cnp;
306};
307
308#
309#% symlink dvp L L L
310#% symlink vpp - U -
311#
312vop_symlink {
313 IN struct vnode *dvp;
314 OUT struct vnode **vpp;
315 IN struct componentname *cnp;
316 IN struct vattr *vap;
317 IN char *target;
318};
319
320#
321#% readdir vp L L L
322#
323vop_readdir {
324 IN struct vnode *vp;
325 INOUT struct uio *uio;
326 IN struct ucred *cred;
327 INOUT int *eofflag;
328 OUT int *ncookies;
329 INOUT u_long **cookies;
330};
331
332#
333#% readlink vp L L L
334#
335vop_readlink {
336 IN struct vnode *vp;
337 INOUT struct uio *uio;
338 IN struct ucred *cred;
339};
340
341#
342#% inactive vp L U U
343#
344vop_inactive {
345 IN struct vnode *vp;
346 IN struct proc *p;
347};
348
349#
350#% reclaim vp U U U
351#
352vop_reclaim {
353 IN struct vnode *vp;
354 IN struct proc *p;
355};
356
357#
358#% lock vp ? ? ?
359#
360vop_lock {
361 IN struct vnode *vp;
362 IN int flags;
363 IN struct proc *p;
364};
365
366#
367#% unlock vp L U L
368#
369vop_unlock {
370 IN struct vnode *vp;
371 IN int flags;
372 IN struct proc *p;
373};
374
375#
376#% bmap vp L L L
377#% bmap vpp - U -
378#
379vop_bmap {
380 IN struct vnode *vp;
381 IN daddr_t bn;
382 OUT struct vnode **vpp;
383 IN daddr_t *bnp;
384 OUT int *runp;
385 OUT int *runb;
386};
387
388#
389#% strategy vp L L L
390#
391vop_strategy {
392 IN struct vnode *vp;
393 IN struct buf *bp;
394};
395
396#
397#% getwritemount vp = = =
398#
399vop_getwritemount {
400 IN struct vnode *vp;
401 OUT struct mount **mpp;
402};
403
404#
405#% copyonwrite vp L L L
406#
407vop_copyonwrite {
408 IN struct vnode *vp;
409 IN struct buf *bp;
410};
411
412#
413#% print vp = = =
414#
415vop_print {
416 IN struct vnode *vp;
417};
418
419#
420#% pathconf vp L L L
421#
422vop_pathconf {
423 IN struct vnode *vp;
424 IN int name;
425 OUT register_t *retval;
426};
427
428#
429#% advlock vp U U U
430#
431vop_advlock {
432 IN struct vnode *vp;
433 IN caddr_t id;
434 IN int op;
435 IN struct flock *fl;
436 IN int flags;
437};
438
439#
440#% balloc vp L L L
441#
442vop_balloc {
443 IN struct vnode *vp;
444 IN off_t startoffset;
445 IN int size;
446 IN struct ucred *cred;
447 IN int flags;
448 OUT struct buf **bpp;
449};
450
451#
452#% reallocblks vp L L L
453#
454vop_reallocblks {
455 IN struct vnode *vp;
456 IN struct cluster_save *buflist;
457};
458
459#
460#% getpages vp L L L
461#
462vop_getpages {
463 IN struct vnode *vp;
464 IN vm_page_t *m;
465 IN int count;
466 IN int reqpage;
467 IN vm_ooffset_t offset;
468};
469
470#
471#% putpages vp L L L
472#
473vop_putpages {
474 IN struct vnode *vp;
475 IN vm_page_t *m;
476 IN int count;
477 IN int sync;
478 IN int *rtvals;
479 IN vm_ooffset_t offset;
480};
481
482#
483#% freeblks vp - - -
484#
485# This call is used by the filesystem to release blocks back to
486# device-driver. This is useful if the driver has a lengthy
487# erase handling or similar.
488#
489
490vop_freeblks {
491 IN struct vnode *vp;
492 IN daddr_t addr;
493 IN daddr_t length;
494};
495
496#
497#% bwrite vp L L L
498#
499vop_bwrite {
500 IN struct vnode *vp;
501 IN struct buf *bp;
502};
503
504#
505#% getacl vp = = =
506#
507vop_getacl {
508 IN struct vnode *vp;
509 IN acl_type_t type;
510 OUT struct acl *aclp;
511 IN struct ucred *cred;
512 IN struct proc *p;
513};
514
515#
516#% setacl vp L L L
517#
518vop_setacl {
519 IN struct vnode *vp;
520 IN acl_type_t type;
521 IN struct acl *aclp;
522 IN struct ucred *cred;
523 IN struct proc *p;
524};
525
526#
527#% aclcheck vp = = =
528#
529vop_aclcheck {
530 IN struct vnode *vp;
531 IN acl_type_t type;
532 IN struct acl *aclp;
533 IN struct ucred *cred;
534 IN struct proc *p;
535};
536
537#
538#% getextattr vp L L L
539#
540vop_getextattr {
541 IN struct vnode *vp;
542 IN const char *name;
543 INOUT struct uio *uio;
544 IN struct ucred *cred;
545 IN struct proc *p;
546};
547
548#
549#% setextattr vp L L L
550#
551vop_setextattr {
552 IN struct vnode *vp;
553 IN const char *name;
554 INOUT struct uio *uio;
555 IN struct ucred *cred;
556 IN struct proc *p;
557};
558
559#
560#% createvobject vp L L L
561#
562vop_createvobject {
563 IN struct vnode *vp;
564 IN struct ucred *cred;
565 IN struct proc *p;
566};
567
568#
569#% destroyvobject vp L L L
570#
571vop_destroyvobject {
572 IN struct vnode *vp;
573};
574
575#
576#% getvobject vp L L L
577#
578vop_getvobject {
579 IN struct vnode *vp;
580 OUT struct vm_object **objpp;
581};