Home | History | Annotate | Line # | Download | only in kern
vnode_if.src revision 1.15
      1 #	$NetBSD: vnode_if.src,v 1.15 1999/02/26 23:38:55 wrstuden Exp $
      2 #
      3 # Copyright (c) 1992, 1993
      4 #	The Regents of the University of California.  All rights reserved.
      5 #
      6 # Redistribution and use in source and binary forms, with or without
      7 # modification, are permitted provided that the following conditions
      8 # are met:
      9 # 1. Redistributions of source code must retain the above copyright
     10 #    notice, this list of conditions and the following disclaimer.
     11 # 2. Redistributions in binary form must reproduce the above copyright
     12 #    notice, this list of conditions and the following disclaimer in the
     13 #    documentation and/or other materials provided with the distribution.
     14 # 3. All advertising materials mentioning features or use of this software
     15 #    must display the following acknowledgement:
     16 #	This product includes software developed by the University of
     17 #	California, Berkeley and its contributors.
     18 # 4. Neither the name of the University nor the names of its contributors
     19 #    may be used to endorse or promote products derived from this software
     20 #    without specific prior written permission.
     21 #
     22 # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     23 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     24 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     25 # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     26 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     27 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     28 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     29 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     30 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     31 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     32 # SUCH DAMAGE.
     33 #
     34 #	@(#)vnode_if.src	8.14 (Berkeley) 8/6/95
     35 #
     36 #
     37 
     38 # 
     39 # Above each of the vop descriptors is a specification of the locking
     40 # protocol used by each vop call.  The first column is the name of
     41 # the variable, the remaining three columns are in, out and error
     42 # respectively.  The "in" column defines the lock state on input,
     43 # the "out" column defines the state on succesful return, and the
     44 # "error" column defines the locking state on error exit.
     45 #     
     46 # The locking value can take the following values:
     47 # L: locked.
     48 # U: unlocked/
     49 # -: not applicable.  vnode does not yet (or no longer) exists.
     50 # =: the same on input and output, may be either L or U.
     51 # X: locked if not nil.
     52 #     
     53  
     54 #
     55 #% lookup     dvp     L ? ?
     56 #% lookup     vpp     - L -
     57 #
     58 # XXX - the lookup locking protocol defies simple description and depends
     59 #     on the flags and operation fields in the (cnp) structure.  Note
     60 #     especially that *vpp may equal dvp and both may be locked.
     61 #
     62 vop_lookup {
     63 	IN struct vnode *dvp;
     64 	INOUT struct vnode **vpp;
     65 	IN struct componentname *cnp;
     66 };
     67 
     68 #
     69 #% create     dvp     L U U
     70 #% create     vpp     - L -
     71 #
     72 vop_create {
     73 	IN WILLRELE struct vnode *dvp;
     74 	OUT struct vnode **vpp;
     75 	IN struct componentname *cnp;
     76 	IN struct vattr *vap;
     77 };
     78 
     79 #
     80 #% mknod      dvp     L U U
     81 #% mknod      vpp     - X -
     82 #
     83 vop_mknod {
     84 	IN WILLRELE struct vnode *dvp;
     85 	OUT WILLRELE struct vnode **vpp;
     86 	IN struct componentname *cnp;
     87 	IN struct vattr *vap;
     88 };
     89 
     90 #
     91 #% open               vp      L L L
     92 #
     93 vop_open {
     94 	IN struct vnode *vp;
     95 	IN int mode;
     96 	IN struct ucred *cred;
     97 	IN struct proc *p;
     98 };
     99 
    100 #
    101 #% close      vp      L L L
    102 #
    103 vop_close {
    104 	IN struct vnode *vp;
    105 	IN int fflag;
    106 	IN struct ucred *cred;
    107 	IN struct proc *p;
    108 };
    109 
    110 #
    111 #% access     vp      L L L
    112 #
    113 vop_access {
    114 	IN struct vnode *vp;
    115 	IN int mode;
    116 	IN struct ucred *cred;
    117 	IN struct proc *p;
    118 };
    119 
    120 #
    121 #% getattr    vp      = = =
    122 #
    123 vop_getattr {
    124 	IN struct vnode *vp;
    125 	IN struct vattr *vap;
    126 	IN struct ucred *cred;
    127 	IN struct proc *p;
    128 };
    129 
    130 #
    131 #% setattr    vp      L L L
    132 #
    133 vop_setattr {
    134 	IN struct vnode *vp;
    135 	IN struct vattr *vap;
    136 	IN struct ucred *cred;
    137 	IN struct proc *p;
    138 };
    139 
    140 #
    141 #% read               vp      L L L
    142 #
    143 vop_read {
    144 	IN struct vnode *vp;
    145 	INOUT struct uio *uio;
    146 	IN int ioflag;
    147 	IN struct ucred *cred;
    148 };
    149 
    150 #
    151 #% write      vp      L L L
    152 #
    153 vop_write {
    154 	IN struct vnode *vp;
    155 	INOUT struct uio *uio;
    156 	IN int ioflag;
    157 	IN struct ucred *cred;
    158 };
    159 
    160 #
    161 #% ioctl      vp      U U U
    162 #
    163 vop_ioctl {
    164 	IN struct vnode *vp;
    165 	IN u_long command;
    166 	IN caddr_t data;
    167 	IN int fflag;
    168 	IN struct ucred *cred;
    169 	IN struct proc *p;
    170 };
    171 
    172 #
    173 #% poll     vp      U U U
    174 #
    175 vop_poll {
    176 	IN struct vnode *vp;
    177 	IN int events;
    178 	IN struct proc *p;
    179 };
    180 
    181 #
    182 #% revoke     vp      U U U
    183 #
    184 vop_revoke {
    185 	IN struct vnode *vp;
    186 	IN int flags;
    187 };
    188 
    189 #     
    190 # XXX - not used
    191 #
    192 vop_mmap {
    193 	IN struct vnode *vp;
    194 	IN int fflags;
    195 	IN struct ucred *cred;
    196 	IN struct proc *p;
    197 };
    198 
    199 #
    200 #% fsync      vp      L L L
    201 #
    202 vop_fsync {
    203 	IN struct vnode *vp;
    204 	IN struct ucred *cred;
    205 	IN int flags;
    206 	IN struct proc *p;
    207 };
    208 
    209 #
    210 # Needs work: Is newoff right?  What's it mean?
    211 #
    212 vop_seek {
    213 	IN struct vnode *vp;
    214 	IN off_t oldoff;
    215 	IN off_t newoff;
    216 	IN struct ucred *cred;
    217 };
    218 
    219 #
    220 #% remove     dvp     L U U
    221 #% remove     vp      L U U
    222 #
    223 vop_remove {
    224 	IN WILLRELE struct vnode *dvp;
    225 	IN WILLRELE struct vnode *vp;
    226 	IN struct componentname *cnp;
    227 };
    228 
    229 #
    230 #% link               vp      U U U
    231 #% link               tdvp    L U U
    232 #
    233 vop_link {
    234 	IN WILLRELE struct vnode *dvp;
    235 	IN struct vnode *vp;
    236 	IN struct componentname *cnp;
    237 };
    238 
    239 #
    240 #% rename     fdvp    U U U
    241 #% rename     fvp     U U U
    242 #% rename     tdvp    L U U
    243 #% rename     tvp     X U U
    244 #
    245 vop_rename {
    246 	IN WILLRELE struct vnode *fdvp;
    247 	IN WILLRELE struct vnode *fvp;
    248 	IN struct componentname *fcnp;
    249 	IN WILLRELE struct vnode *tdvp;
    250 	IN WILLRELE struct vnode *tvp;
    251 	IN struct componentname *tcnp;
    252 };
    253 
    254 #
    255 #% mkdir      dvp     L U U
    256 #% mkdir      vpp     - L - 
    257 #
    258 vop_mkdir {
    259 	IN WILLRELE struct vnode *dvp;
    260 	OUT struct vnode **vpp;
    261 	IN struct componentname *cnp;
    262 	IN struct vattr *vap;
    263 };
    264 
    265 #
    266 #% rmdir      dvp     L U U
    267 #% rmdir      vp      L U U
    268 #
    269 vop_rmdir {
    270 	IN WILLRELE struct vnode *dvp;
    271 	IN WILLRELE struct vnode *vp;
    272 	IN struct componentname *cnp;
    273 };
    274 
    275 #
    276 #% symlink    dvp     L U U
    277 #% symlink    vpp     - U -
    278 #
    279 # XXX - note that the return vnode has already been VRELE'ed
    280 #     by the filesystem layer.  To use it you must use vget,
    281 #     possibly with a further namei.
    282 #
    283 vop_symlink {
    284 	IN WILLRELE struct vnode *dvp;
    285 	OUT WILLRELE struct vnode **vpp;
    286 	IN struct componentname *cnp;
    287 	IN struct vattr *vap;
    288 	IN char *target;
    289 };
    290 
    291 #
    292 #% readdir    vp      L L L   
    293 #
    294 vop_readdir {
    295 	IN struct vnode *vp;
    296 	INOUT struct uio *uio;
    297 	IN struct ucred *cred;
    298 	OUT int *eofflag;
    299 	OUT off_t **cookies;
    300 	IN int *ncookies;
    301 };
    302 
    303 #
    304 #% readlink   vp      L L L
    305 #
    306 vop_readlink {
    307 	IN struct vnode *vp;
    308 	INOUT struct uio *uio;
    309 	IN struct ucred *cred;
    310 };
    311 
    312 #
    313 #% abortop    dvp     = = =
    314 #
    315 vop_abortop {
    316 	IN struct vnode *dvp;
    317 	IN struct componentname *cnp;
    318 };
    319 
    320 #
    321 #% inactive   vp      L U U  
    322 #
    323 vop_inactive {
    324 	IN struct vnode *vp;
    325 	IN struct proc *p;
    326 };
    327 
    328 #
    329 #% reclaim    vp      U U U
    330 #
    331 vop_reclaim {
    332 	IN struct vnode *vp;
    333 	IN struct proc *p;
    334 };
    335 
    336 #
    337 #% lock               vp      U L U
    338 #
    339 vop_lock {
    340 	IN struct vnode *vp;
    341 	IN int flags;
    342 };
    343 
    344 #
    345 #% unlock     vp      L U L
    346 #
    347 vop_unlock {
    348 	IN struct vnode *vp;
    349 	IN int flags;
    350 };
    351 
    352 #
    353 #% bmap               vp      L L L
    354 #% bmap               vpp     - U -
    355 #
    356 vop_bmap {
    357 	IN struct vnode *vp;
    358 	IN daddr_t bn;
    359 	OUT struct vnode **vpp;
    360 	IN daddr_t *bnp;
    361 	OUT int *runp;
    362 };
    363 
    364 #
    365 # Needs work: no vp?
    366 #
    367 #vop_strategy {
    368 #	IN struct buf *bp;
    369 #};
    370 
    371 #
    372 #% print      vp      = = =
    373 #
    374 vop_print {
    375 	IN struct vnode *vp;
    376 };
    377 
    378 #
    379 #% islocked   vp      = = =
    380 #
    381 vop_islocked {
    382 	IN struct vnode *vp;
    383 };
    384 
    385 #
    386 #% pathconf   vp      L L L
    387 #
    388 vop_pathconf {
    389 	IN struct vnode *vp;
    390 	IN int name;
    391 	OUT register_t *retval;
    392 };
    393 
    394 #
    395 #% advlock    vp      U U U
    396 #
    397 vop_advlock {
    398 	IN struct vnode *vp;
    399 	IN caddr_t id;
    400 	IN int op;
    401 	IN struct flock *fl;
    402 	IN int flags;
    403 };
    404 
    405 #
    406 #% blkatoff   vp      L L L
    407 #
    408 vop_blkatoff {
    409 	IN struct vnode *vp;
    410 	IN off_t offset;
    411 	OUT char **res;
    412 	OUT struct buf **bpp;
    413 };
    414 
    415 #
    416 #% valloc     pvp     L L L
    417 #
    418 vop_valloc {
    419 	IN struct vnode *pvp;
    420 	IN int mode;
    421 	IN struct ucred *cred;
    422 	OUT struct vnode **vpp;
    423 };
    424 
    425 #
    426 #% reallocblks        vp      L L L
    427 #
    428 vop_reallocblks {
    429 	IN struct vnode *vp;
    430 	IN struct cluster_save *buflist;
    431 };
    432 
    433 #
    434 #% vfree      pvp     L L L
    435 #
    436 vop_vfree {
    437 	IN struct vnode *pvp;
    438 	IN ino_t ino;
    439 	IN int mode;
    440 };
    441 
    442 #
    443 #% truncate   vp      L L L
    444 #
    445 vop_truncate {
    446 	IN struct vnode *vp;
    447 	IN off_t length;
    448 	IN int flags;
    449 	IN struct ucred *cred;
    450 	IN struct proc *p;
    451 };
    452 
    453 #
    454 #% update     vp      L L L
    455 #
    456 vop_update {
    457 	IN struct vnode *vp;
    458 	IN struct timespec *access;
    459 	IN struct timespec *modify;
    460 	IN int waitfor;
    461 };
    462 
    463 # 
    464 #% lease      vp      = = =
    465 # 
    466 vop_lease {
    467 	IN struct vnode *vp;
    468 	IN struct proc *p;
    469 	IN struct ucred *cred;
    470 	IN int flag;
    471 };
    472 
    473 #
    474 #% whiteout   dvp     L L L
    475 #% whiteout   cnp     - - -
    476 #% whiteout   flag    - - -
    477 # 
    478 vop_whiteout {
    479 	IN struct vnode *dvp;
    480 	IN struct componentname *cnp;
    481 	IN int flags;
    482 };
    483 
    484 #
    485 # Needs work: no vp?
    486 #
    487 #vop_bwrite {
    488 #	IN struct buf *bp;
    489 #};
    490