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 # 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$
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.
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
53 #
54 #% lookup dvp L ? ?
55 #% lookup vpp - L -
56 #
57 # XXX - the lookup locking protocol defies simple description and depends
58 # on the flags and operation fields in the (cnp) structure. Note
59 # especially that *vpp may equal dvp and both may be locked.
60 #
61 vop_lookup {
62 IN struct vnode *dvp;
63 INOUT struct vnode **vpp;
64 IN struct componentname *cnp;
65 };
66
67 #
68 #% cachedlookup dvp L ? ?
69 #% cachedlookup vpp - L -
70 #
71 # This must be an exact copy of lookup. See kern/vfs_cache.c for details.
72 #
73 vop_cachedlookup {
74 IN struct vnode *dvp;
75 INOUT struct vnode **vpp;
76 IN struct componentname *cnp;
77 };
78
79 #
80 #% create dvp L L L
81 #% create vpp - L -
82 #
83 vop_create {
84 IN struct vnode *dvp;
85 OUT struct vnode **vpp;
86 IN struct componentname *cnp;
87 IN struct vattr *vap;
88 };
89
90 #
91 #% whiteout dvp L L L
92 #% whiteout cnp - - -
93 #% whiteout flag - - -
94 #
95 vop_whiteout {
96 IN struct vnode *dvp;
97 IN struct componentname *cnp;
98 IN int flags;
99 };
100
101 #
102 #% mknod dvp L L L
103 #% mknod vpp - X -
104 #
105 vop_mknod {
106 IN struct vnode *dvp;
107 OUT WILLRELE struct vnode **vpp;
108 IN struct componentname *cnp;
109 IN struct vattr *vap;
110 };
111
112 #
113 #% open vp L L L
114 #
115 vop_open {
116 IN struct vnode *vp;
117 IN int mode;
118 IN struct ucred *cred;
119 IN struct proc *p;
120 };
121
122 #
123 #% close vp U U U
124 #
125 vop_close {
126 IN struct vnode *vp;
127 IN int fflag;
128 IN struct ucred *cred;
129 IN struct proc *p;
130 };
131
132 #
133 #% access vp L L L
134 #
135 vop_access {
136 IN struct vnode *vp;
137 IN int mode;
138 IN struct ucred *cred;
139 IN struct proc *p;
140 };
141
142 #
143 #% getattr vp = = =
144 #
145 vop_getattr {
146 IN struct vnode *vp;
147 IN struct vattr *vap;
148 IN struct ucred *cred;
149 IN struct proc *p;
150 };
151
152 #
153 #% setattr vp L L L
154 #
155 vop_setattr {
156 IN struct vnode *vp;
157 IN struct vattr *vap;
158 IN struct ucred *cred;
159 IN struct proc *p;
160 };
161
162 #
163 #% read vp L L L
164 #
165 vop_read {
166 IN struct vnode *vp;
167 INOUT struct uio *uio;
168 IN int ioflag;
169 IN struct ucred *cred;
170 };
171
172 #
173 #% write vp L L L
174 #
175 vop_write {
176 IN struct vnode *vp;
177 INOUT struct uio *uio;
178 IN int ioflag;
179 IN struct ucred *cred;
180 };
181
182 #
183 #% lease vp = = =
184 #
185 vop_lease {
186 IN struct vnode *vp;
187 IN struct proc *p;
188 IN struct ucred *cred;
189 IN int flag;
190 };
191
192 #
193 #% ioctl vp U U U
194 #
195 vop_ioctl {
196 IN struct vnode *vp;
197 IN u_long command;
198 IN caddr_t data;
199 IN int fflag;
200 IN struct ucred *cred;
201 IN struct proc *p;
202 };
203
204 #
205 #% poll vp U U U
206 #
207 vop_poll {
208 IN struct vnode *vp;
209 IN int events;
210 IN struct ucred *cred;
211 IN struct proc *p;
212 };
213
214 #
215 #% revoke vp U U U
216 #
217 vop_revoke {
218 IN struct vnode *vp;
219 IN int flags;
220 };
221
222 #
223 # XXX - not used
224 #
225 vop_mmap {
226 IN struct vnode *vp;
227 IN int fflags;
228 IN struct ucred *cred;
229 IN struct proc *p;
230 };
231
232 #
233 #% fsync vp L L L
234 #
235 vop_fsync {
236 IN struct vnode *vp;
237 IN struct ucred *cred;
238 IN int waitfor;
239 IN struct proc *p;
240 };
241
242 #
243 #% remove dvp L L L
244 #% remove vp L L L
245 #
246 vop_remove {
247 IN struct vnode *dvp;
248 IN struct vnode *vp;
249 IN struct componentname *cnp;
250 };
251
252 #
253 #% link tdvp L L L
254 #% link vp U U U
255 #
256 vop_link {
257 IN struct vnode *tdvp;
258 IN struct vnode *vp;
259 IN struct componentname *cnp;
260 };
261
262 #
263 #% rename fdvp U U U
264 #% rename fvp U U U
265 #% rename tdvp L U U
266 #% rename tvp X U U
267 #
268 vop_rename {
269 IN WILLRELE struct vnode *fdvp;
270 IN WILLRELE struct vnode *fvp;
271 IN struct componentname *fcnp;
272 IN WILLRELE struct vnode *tdvp;
273 IN WILLRELE struct vnode *tvp;
274 IN struct componentname *tcnp;
275 };
276
277 #
278 #% mkdir dvp L L L
279 #% mkdir vpp - L -
280 #
281 vop_mkdir {
282 IN struct vnode *dvp;
283 OUT struct vnode **vpp;
284 IN struct componentname *cnp;
285 IN struct vattr *vap;
286 };
287
288 #
289 #% rmdir dvp L L L
290 #% rmdir vp L L L
291 #
292 vop_rmdir {
293 IN struct vnode *dvp;
294 IN struct vnode *vp;
295 IN struct componentname *cnp;
296 };
297
298 #
299 #% symlink dvp L L L
300 #% symlink vpp - U -
301 #
302 # XXX - note that the return vnode has already been VRELE'ed
303 # by the filesystem layer. To use it you must use vget,
304 # possibly with a further namei.
305 #
306 vop_symlink {
307 IN struct vnode *dvp;
308 OUT WILLRELE struct vnode **vpp;
309 IN struct componentname *cnp;
310 IN struct vattr *vap;
311 IN char *target;
312 };
313
314 #
315 #% readdir vp L L L
316 #
317 vop_readdir {
318 IN struct vnode *vp;
319 INOUT struct uio *uio;
320 IN struct ucred *cred;
321 INOUT int *eofflag;
322 OUT int *ncookies;
323 INOUT u_long **cookies;
324 };
325
326 #
327 #% readlink vp L L L
328 #
329 vop_readlink {
330 IN struct vnode *vp;
331 INOUT struct uio *uio;
332 IN struct ucred *cred;
333 };
334
335 #
336 #% abortop dvp = = =
337 #
338 vop_abortop {
339 IN struct vnode *dvp;
340 IN struct componentname *cnp;
341 };
342
343 #
344 #% inactive vp L U U
345 #
346 vop_inactive {
347 IN struct vnode *vp;
348 IN struct proc *p;
349 };
350
351 #
352 #% reclaim vp U U U
353 #
354 vop_reclaim {
355 IN struct vnode *vp;
356 IN struct proc *p;
357 };
358
359 #
360 #% lock vp U L U
361 #
362 vop_lock {
363 IN struct vnode *vp;
364 IN int flags;
365 IN struct proc *p;
366 };
367
368 #
369 #% unlock vp L U L
370 #
371 vop_unlock {
372 IN struct vnode *vp;
373 IN int flags;
374 IN struct proc *p;
375 };
376
377 #
378 #% bmap vp L L L
379 #% bmap vpp - U -
380 #
381 vop_bmap {
382 IN struct vnode *vp;
383 IN daddr_t bn;
384 OUT struct vnode **vpp;
385 IN daddr_t *bnp;
386 OUT int *runp;
387 OUT int *runb;
388 };
389
390 #
391 # Needs work: no vp?
392 #
393 vop_strategy {
394 IN struct vnode *vp;
395 IN struct buf *bp;
396 };
397
398 #
399 #% print vp = = =
400 #
401 vop_print {
402 IN struct vnode *vp;
403 };
404
405 #
406 #% islocked vp = = =
407 #
408 vop_islocked {
409 IN struct vnode *vp;
410 };
411
412 #
413 #% pathconf vp L L L
414 #
415 vop_pathconf {
416 IN struct vnode *vp;
417 IN int name;
418 OUT register_t *retval;
419 };
420
421 #
422 #% advlock vp U U U
423 #
424 vop_advlock {
425 IN struct vnode *vp;
426 IN caddr_t id;
427 IN int op;
428 IN struct flock *fl;
429 IN int flags;
430 };
431
432 #
433 #% balloc vp L L L
434 #
435 vop_balloc {
436 IN struct vnode *vp;
437 IN off_t startoffset;
438 IN int size;
439 IN struct ucred *cred;
440 IN int flags;
441 OUT struct buf **bpp;
442 };
443
444 #
445 #% reallocblks vp L L L
446 #
447 vop_reallocblks {
448 IN struct vnode *vp;
449 IN struct cluster_save *buflist;
450 };
451
452 vop_getpages {
453 IN struct vnode *vp;
454 IN vm_page_t *m;
455 IN int count;
456 IN int reqpage;
457 IN vm_ooffset_t offset;
458 };
459
460 vop_putpages {
461 IN struct vnode *vp;
462 IN vm_page_t *m;
463 IN int count;
464 IN int sync;
465 IN int *rtvals;
466 IN vm_ooffset_t offset;
467 };
468
469 #
470 #% freeblks vp - - -
471 #
472 # This call is used by the filesystem to release blocks back to
473 # device-driver. This is useful if the driver has a lengthy
474 # erase handling or similar.
475 #
476
477 vop_freeblks {
478 IN struct vnode *vp;
479 IN daddr_t addr;
480 IN daddr_t length;
481 };
482
483 #
484 # Needs work: no vp?
485 #
486 #vop_bwrite {
487 # IN struct buf *bp;
488 #};
Cache object: c8083c87124680e87051ad21cf72b159
|