Ignore machine-check MSRs
[freebsd-src/fkvm-freebsd.git] / sys / kern / vnode_if.src
blob0289fe82ef2060fb09d27085d19a38a01fa32946
1 #-
2 # Copyright (c) 1992, 1993
3 #       The Regents of the University of California.  All rights reserved.
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.
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.
29 #       @(#)vnode_if.src        8.12 (Berkeley) 5/14/95
30 # $FreeBSD$
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.
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.
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 !
55 # Lines starting with %! specify a pre or post-condition function
56 # to call before/after the vop call.
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()".
62 vop_islocked {
63         IN struct vnode *vp;
66 %% lookup       dvp     L ? ?
67 %% lookup       vpp     - L -
68 %! lookup       pre     vop_lookup_pre
69 %! lookup       post    vop_lookup_post
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.
75 vop_lookup {
76         IN struct vnode *dvp;
77         INOUT struct vnode **vpp;
78         IN struct componentname *cnp;
81 %% cachedlookup dvp     L ? ?
82 %% cachedlookup vpp     - L -
84 # This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
86 vop_cachedlookup {
87         IN struct vnode *dvp;
88         INOUT struct vnode **vpp;
89         IN struct componentname *cnp;
92 %% create       dvp     E E E
93 %% create       vpp     - L -
94 %! create       post    vop_create_post
96 vop_create {
97         IN struct vnode *dvp;
98         OUT struct vnode **vpp;
99         IN struct componentname *cnp;
100         IN struct vattr *vap;
104 %% whiteout     dvp     E E E
106 vop_whiteout {
107         IN struct vnode *dvp;
108         IN struct componentname *cnp;
109         IN int flags;
113 %% mknod        dvp     E E E
114 %% mknod        vpp     - L -
115 %! mknod        post    vop_mknod_post
117 vop_mknod {
118         IN struct vnode *dvp;
119         OUT struct vnode **vpp;
120         IN struct componentname *cnp;
121         IN struct vattr *vap;
125 %% open         vp      L L L
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;
136 %% close        vp      E E E
138 vop_close {
139         IN struct vnode *vp;
140         IN int fflag;
141         IN struct ucred *cred;
142         IN struct thread *td;
146 %% access       vp      L L L
148 vop_access {
149         IN struct vnode *vp;
150         IN int mode;
151         IN struct ucred *cred;
152         IN struct thread *td;
156 %% getattr      vp      L L L
158 vop_getattr {
159         IN struct vnode *vp;
160         OUT struct vattr *vap;
161         IN struct ucred *cred;
165 %% setattr      vp      E E E
166 %! setattr      post    vop_setattr_post
168 vop_setattr {
169         IN struct vnode *vp;
170         IN struct vattr *vap;
171         IN struct ucred *cred;
175 %% read         vp      L L L
177 vop_read {
178         IN struct vnode *vp;
179         INOUT struct uio *uio;
180         IN int ioflag;
181         IN struct ucred *cred;
185 %% write        vp      E E E
186 %! write        pre     VOP_WRITE_PRE
187 %! write        post    VOP_WRITE_POST
189 vop_write {
190         IN struct vnode *vp;
191         INOUT struct uio *uio;
192         IN int ioflag;
193         IN struct ucred *cred;
197 %% lease        vp      = = =
199 vop_lease {
200         IN struct vnode *vp;
201         IN struct thread *td;
202         IN struct ucred *cred;
203         IN int flag;
207 %% ioctl        vp      U U U
209 vop_ioctl {
210         IN struct vnode *vp;
211         IN u_long command;
212         IN void *data;
213         IN int fflag;
214         IN struct ucred *cred;
215         IN struct thread *td;
219 %% poll vp      U U U
221 vop_poll {
222         IN struct vnode *vp;
223         IN int events;
224         IN struct ucred *cred;
225         IN struct thread *td;
229 %% kqfilter     vp      U U U
231 vop_kqfilter {
232         IN struct vnode *vp;
233         IN struct knote *kn;
237 %% revoke       vp      L L L
239 vop_revoke {
240         IN struct vnode *vp;
241         IN int flags;
245 %% fsync        vp      E E E
247 vop_fsync {
248         IN struct vnode *vp;
249         IN int waitfor;
250         IN struct thread *td;
254 %% remove       dvp     E E E
255 %% remove       vp      E E E
256 %! remove       post    vop_remove_post
258 vop_remove {
259         IN struct vnode *dvp;
260         IN struct vnode *vp;
261         IN struct componentname *cnp;
265 %% link         tdvp    E E E
266 %% link         vp      E E E
267 %! link         post    vop_link_post
269 vop_link {
270         IN struct vnode *tdvp;
271         IN struct vnode *vp;
272         IN struct componentname *cnp;
276 %! rename       pre     vop_rename_pre
277 %! rename       post    vop_rename_post
279 vop_rename {
280         IN WILLRELE struct vnode *fdvp;
281         IN WILLRELE struct vnode *fvp;
282         IN struct componentname *fcnp;
283         IN WILLRELE struct vnode *tdvp;
284         IN WILLRELE struct vnode *tvp;
285         IN struct componentname *tcnp;
289 %% mkdir        dvp     E E E
290 %% mkdir        vpp     - E -
291 %! mkdir        post    vop_mkdir_post
293 vop_mkdir {
294         IN struct vnode *dvp;
295         OUT struct vnode **vpp;
296         IN struct componentname *cnp;
297         IN struct vattr *vap;
301 %% rmdir        dvp     E E E
302 %% rmdir        vp      E E E
303 %! rmdir        post    vop_rmdir_post
305 vop_rmdir {
306         IN struct vnode *dvp;
307         IN struct vnode *vp;
308         IN struct componentname *cnp;
312 %% symlink      dvp     E E E
313 %% symlink      vpp     - E -
314 %! symlink      post    vop_symlink_post
316 vop_symlink {
317         IN struct vnode *dvp;
318         OUT struct vnode **vpp;
319         IN struct componentname *cnp;
320         IN struct vattr *vap;
321         IN char *target;
325 %% readdir      vp      L L L
327 vop_readdir {
328         IN struct vnode *vp;
329         INOUT struct uio *uio;
330         IN struct ucred *cred;
331         INOUT int *eofflag;
332         OUT int *ncookies;
333         INOUT u_long **cookies;
337 %% readlink     vp      L L L
339 vop_readlink {
340         IN struct vnode *vp;
341         INOUT struct uio *uio;
342         IN struct ucred *cred;
346 %% inactive     vp      E E E
348 vop_inactive {
349         IN struct vnode *vp;
350         IN struct thread *td;
354 %% reclaim      vp      E E E
356 vop_reclaim {
357         IN struct vnode *vp;
358         IN struct thread *td;
362 %! lock1        pre     vop_lock_pre
363 %! lock1        post    vop_lock_post
365 vop_lock1 {
366         IN struct vnode *vp;
367         IN int flags;
368         IN char *file;
369         IN int line;
373 %! unlock       pre     vop_unlock_pre
374 %! unlock       post    vop_unlock_post
376 vop_unlock {
377         IN struct vnode *vp;
378         IN int flags;
382 %% bmap         vp      L L L
384 vop_bmap {
385         IN struct vnode *vp;
386         IN daddr_t bn;
387         OUT struct bufobj **bop;
388         IN daddr_t *bnp;
389         OUT int *runp;
390         OUT int *runb;
394 %% strategy     vp      L L L
395 %! strategy     pre     vop_strategy_pre
397 vop_strategy {
398         IN struct vnode *vp;
399         IN struct buf *bp;
403 %% getwritemount vp     = = =
405 vop_getwritemount {
406         IN struct vnode *vp;
407         OUT struct mount **mpp;
411 %% print        vp      - - -
413 vop_print {
414         IN struct vnode *vp;
418 %% pathconf     vp      L L L
420 vop_pathconf {
421         IN struct vnode *vp;
422         IN int name;
423         OUT register_t *retval;
427 %% advlock      vp      U U U
429 vop_advlock {
430         IN struct vnode *vp;
431         IN void *id;
432         IN int op;
433         IN struct flock *fl;
434         IN int flags;
438 %% advlockasync vp      U U U
440 vop_advlockasync {
441         IN struct vnode *vp;
442         IN void *id;
443         IN int op;
444         IN struct flock *fl;
445         IN int flags;
446         IN struct task *task;   
447         INOUT void **cookiep;
451 %% reallocblks  vp      E E E
453 vop_reallocblks {
454         IN struct vnode *vp;
455         IN struct cluster_save *buflist;
459 %% getpages     vp      L L L
461 vop_getpages {
462         IN struct vnode *vp;
463         IN vm_page_t *m;
464         IN int count;
465         IN int reqpage;
466         IN vm_ooffset_t offset;
470 %% putpages     vp      E E E
472 vop_putpages {
473         IN struct vnode *vp;
474         IN vm_page_t *m;
475         IN int count;
476         IN int sync;
477         IN int *rtvals;
478         IN vm_ooffset_t offset;
482 %% getacl       vp      L L L
484 vop_getacl {
485         IN struct vnode *vp;
486         IN acl_type_t type;
487         OUT struct acl *aclp;
488         IN struct ucred *cred;
489         IN struct thread *td;
493 %% setacl       vp      E E E
495 vop_setacl {
496         IN struct vnode *vp;
497         IN acl_type_t type;
498         IN struct acl *aclp;
499         IN struct ucred *cred;
500         IN struct thread *td;
504 %% aclcheck     vp      = = =
506 vop_aclcheck {
507         IN struct vnode *vp;
508         IN acl_type_t type;
509         IN struct acl *aclp;
510         IN struct ucred *cred;
511         IN struct thread *td;
515 %% closeextattr vp      L L L
517 vop_closeextattr {
518         IN struct vnode *vp;
519         IN int commit;
520         IN struct ucred *cred;
521         IN struct thread *td;
525 %% getextattr   vp      L L L
527 vop_getextattr {
528         IN struct vnode *vp;
529         IN int attrnamespace;
530         IN const char *name;
531         INOUT struct uio *uio;
532         OUT size_t *size;
533         IN struct ucred *cred;
534         IN struct thread *td;
538 %% listextattr  vp      L L L
540 vop_listextattr {
541         IN struct vnode *vp;
542         IN int attrnamespace;
543         INOUT struct uio *uio;
544         OUT size_t *size;
545         IN struct ucred *cred;
546         IN struct thread *td;
550 %% openextattr  vp      L L L
552 vop_openextattr {
553         IN struct vnode *vp;
554         IN struct ucred *cred;
555         IN struct thread *td;
559 %% deleteextattr        vp      E E E
561 vop_deleteextattr {
562         IN struct vnode *vp;
563         IN int attrnamespace;
564         IN const char *name;
565         IN struct ucred *cred;
566         IN struct thread *td;
570 %% setextattr   vp      E E E
572 vop_setextattr {
573         IN struct vnode *vp;
574         IN int attrnamespace;
575         IN const char *name;
576         INOUT struct uio *uio;
577         IN struct ucred *cred;
578         IN struct thread *td;
582 %% setlabel     vp      E E E
584 vop_setlabel {
585         IN struct vnode *vp;
586         IN struct label *label;
587         IN struct ucred *cred;
588         IN struct thread *td;
592 %% setlabel     vp      = = =
594 vop_vptofh {
595         IN struct vnode *vp;
596         IN struct fid *fhp;