The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/kern/vnode_if.src

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #       $NetBSD: vnode_if.src,v 1.50.12.1 2007/02/17 23:27:48 tron 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 successful 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 # For operations other than VOP_LOOKUP which require a component name
   54 # parameter, the flags required for the initial namei() call are listed.
   55 # Additional flags may be added to the namei() call, but these are required.
   56 #     
   57  
   58 #
   59 #% lookup     dvp     L L L
   60 #% lookup     vpp     - L -
   61 #
   62 # XXX - the lookup locking protocol defies simple description.
   63 #    Note especially that *vpp may equal dvp.
   64 #
   65 #    More details:
   66 #     There are three types of lookups: ".", ".." (ISDOTDOT), and other.
   67 #     On successful lookup of ".", a reference is added to dvp, and it
   68 #          is returned in *vpp.
   69 #     To look up ISDOTDOT, dvp is unlocked, the ".." node is locked, and
   70 #          then dvp is relocked.  This preserves the protocol of always
   71 #          locking nodes from root ("/") downward and prevents deadlock.
   72 #     Other lookups find the named node (creating the vnode if needed) and
   73 #          return it, locked, in *vpp.
   74 #     On failure, *vpp is NULL, and *dvp is left locked.
   75 #       
   76 #     *vpp is always locked on return if the operation succeeds.
   77 #          Typically, if *vpp == dvp, you need to release twice, but
   78 #          unlock only once.
   79 #
   80 #     See sys/sys/namei.h for a description of the SAVENAME and SAVESTART
   81 #          flags.
   82 #
   83 vop_lookup {
   84         IN struct vnode *dvp;
   85         INOUT struct vnode **vpp;
   86         IN struct componentname *cnp;
   87 };
   88 
   89 #
   90 #% create     dvp     L U U
   91 #% create     vpp     - L -
   92 #
   93 #! create cnp   CREATE, LOCKPARENT
   94 #
   95 vop_create {
   96         IN LOCKED=YES WILLPUT struct vnode *dvp;
   97         OUT struct vnode **vpp;
   98         IN struct componentname *cnp;
   99         IN struct vattr *vap;
  100 };
  101 
  102 #
  103 #% mknod      dvp     L U U
  104 #% mknod      vpp     - L -
  105 #
  106 #! mknod cnp    CREATE, LOCKPARENT
  107 #
  108 vop_mknod {
  109         IN LOCKED=YES WILLPUT struct vnode *dvp;
  110         OUT struct vnode **vpp;
  111         IN struct componentname *cnp;
  112         IN struct vattr *vap;
  113 };
  114 
  115 #
  116 #% open               vp      L L L
  117 #
  118 vop_open {
  119         IN LOCKED=YES struct vnode *vp;
  120         IN int mode;
  121         IN kauth_cred_t cred;
  122         IN struct lwp *l;
  123 };
  124 
  125 #
  126 #% close      vp      L L L
  127 #
  128 vop_close {
  129         IN LOCKED=YES struct vnode *vp;
  130         IN int fflag;
  131         IN kauth_cred_t cred;
  132         IN struct lwp *l;
  133 };
  134 
  135 #
  136 #% access     vp      L L L
  137 #
  138 vop_access {
  139         IN LOCKED=YES struct vnode *vp;
  140         IN int mode;
  141         IN kauth_cred_t cred;
  142         IN struct lwp *l;
  143 };
  144 
  145 #
  146 #% getattr    vp      = = =
  147 #
  148 vop_getattr {
  149         IN struct vnode *vp;
  150         IN struct vattr *vap;
  151         IN kauth_cred_t cred;
  152         IN struct lwp *l;
  153 };
  154 
  155 #
  156 #% setattr    vp      L L L
  157 #
  158 vop_setattr {
  159         IN LOCKED=YES struct vnode *vp;
  160         IN struct vattr *vap;
  161         IN kauth_cred_t cred;
  162         IN struct lwp *l;
  163 };
  164 
  165 #
  166 #% read               vp      L L L
  167 #
  168 vop_read {
  169         IN LOCKED=YES struct vnode *vp;
  170         INOUT struct uio *uio;
  171         IN int ioflag;
  172         IN kauth_cred_t cred;
  173 };
  174 
  175 #
  176 #% write      vp      L L L
  177 #
  178 vop_write {
  179         IN LOCKED=YES struct vnode *vp;
  180         INOUT struct uio *uio;
  181         IN int ioflag;
  182         IN kauth_cred_t cred;
  183 };
  184 
  185 #
  186 #% ioctl      vp      U U U
  187 #
  188 vop_ioctl {
  189         IN LOCKED=NO struct vnode *vp;
  190         IN u_long command;
  191         IN void *data;
  192         IN int fflag;
  193         IN kauth_cred_t cred;
  194         IN struct lwp *l;
  195 };
  196 
  197 #
  198 #% fcntl      vp      U U U
  199 #
  200 vop_fcntl {
  201         IN LOCKED=NO struct vnode *vp;
  202         IN u_int command;
  203         IN void *data;
  204         IN int fflag;
  205         IN kauth_cred_t cred;
  206         IN struct lwp *l;
  207 };
  208 
  209 #
  210 #% poll     vp      U U U
  211 #
  212 vop_poll {
  213         IN LOCKED=NO struct vnode *vp;
  214         IN int events;
  215         IN struct lwp *l;
  216 };
  217 
  218 #
  219 #% kqfilter     vp      U U U
  220 #
  221 vop_kqfilter {
  222         IN LOCKED=NO struct vnode *vp;
  223         IN struct knote *kn;
  224 };
  225 
  226 #
  227 #% revoke     vp      U U U
  228 #
  229 vop_revoke {
  230         IN LOCKED=NO struct vnode *vp;
  231         IN int flags;
  232 };
  233 
  234 #     
  235 #% mmap      vp      = = =
  236 #
  237 vop_mmap {
  238         IN struct vnode *vp;
  239         IN int fflags;
  240         IN kauth_cred_t cred;
  241         IN struct lwp *l;
  242 };
  243 
  244 #
  245 #% fsync      vp      L L L
  246 #
  247 vop_fsync {
  248         IN LOCKED=YES struct vnode *vp;
  249         IN kauth_cred_t cred;
  250         IN int flags;
  251         IN off_t offlo;
  252         IN off_t offhi;
  253         IN struct lwp *l;
  254 };
  255 
  256 #
  257 # Needs work: Is newoff right?  What's it mean?
  258 # XXX Locking protocol?
  259 #
  260 vop_seek {
  261         IN struct vnode *vp;
  262         IN off_t oldoff;
  263         IN off_t newoff;
  264         IN kauth_cred_t cred;
  265 };
  266 
  267 #
  268 #% remove     dvp     L U U
  269 #% remove     vp      L U U
  270 #
  271 #! remove cnp   DELETE, LOCKPARENT | LOCKLEAF
  272 #
  273 vop_remove {
  274         IN LOCKED=YES WILLPUT struct vnode *dvp;
  275         IN LOCKED=YES WILLPUT struct vnode *vp;
  276         IN struct componentname *cnp;
  277 };
  278 
  279 #
  280 #% link               vp      U U U
  281 #% link               dvp     L U U
  282 #
  283 #! link  cnp    CREATE, LOCKPARENT
  284 #
  285 vop_link {
  286         IN LOCKED=YES WILLPUT struct vnode *dvp;
  287         IN LOCKED=NO struct vnode *vp;
  288         IN struct componentname *cnp;
  289 };
  290 
  291 #
  292 #% rename     fdvp    U U U
  293 #% rename     fvp     U U U
  294 #% rename     tdvp    L U U
  295 #% rename     tvp     X U U
  296 #
  297 #! rename fcnp  DELETE, LOCKPARENT | SAVESTART
  298 #! rename tcnp  RENAME, LOCKPARENT | LOCKLEAF | NOCACHE | SAVESTART
  299 #
  300 # XXX the vop_rename routines should REALLY NOT be depending on SAVESTART!
  301 #
  302 vop_rename {
  303         IN LOCKED=NO WILLRELE struct vnode *fdvp;
  304         IN LOCKED=NO WILLRELE struct vnode *fvp;
  305         IN struct componentname *fcnp;
  306         IN LOCKED=YES WILLPUT struct vnode *tdvp;
  307         IN WILLPUT struct vnode *tvp;
  308         IN struct componentname *tcnp;
  309 };
  310 
  311 #
  312 #% mkdir      dvp     L U U
  313 #% mkdir      vpp     - L - 
  314 #
  315 #! mkdir cnp    CREATE, LOCKPARENT
  316 #
  317 vop_mkdir {
  318         IN LOCKED=YES WILLPUT struct vnode *dvp;
  319         OUT struct vnode **vpp;
  320         IN struct componentname *cnp;
  321         IN struct vattr *vap;
  322 };
  323 
  324 #
  325 #% rmdir      dvp     L U U
  326 #% rmdir      vp      L U U
  327 #
  328 #! rmdir cnp    DELETE, LOCKPARENT | LOCKLEAF
  329 #
  330 vop_rmdir {
  331         IN LOCKED=YES WILLPUT struct vnode *dvp;
  332         IN LOCKED=YES WILLPUT struct vnode *vp;
  333         IN struct componentname *cnp;
  334 };
  335 
  336 #
  337 #% symlink    dvp     L U U
  338 #% symlink    vpp     - L -
  339 #
  340 #! symlink cnp  CREATE, LOCKPARENT
  341 #
  342 vop_symlink {
  343         IN LOCKED=YES WILLPUT struct vnode *dvp;
  344         OUT struct vnode **vpp;
  345         IN struct componentname *cnp;
  346         IN struct vattr *vap;
  347         IN char *target;
  348 };
  349 
  350 #
  351 #% readdir    vp      L L L   
  352 #
  353 vop_readdir {
  354         IN LOCKED=YES struct vnode *vp;
  355         INOUT struct uio *uio;
  356         IN kauth_cred_t cred;
  357         OUT int *eofflag;
  358         OUT off_t **cookies;
  359         IN int *ncookies;
  360 };
  361 
  362 #
  363 #% readlink   vp      L L L
  364 #
  365 vop_readlink {
  366         IN LOCKED=YES struct vnode *vp;
  367         INOUT struct uio *uio;
  368         IN kauth_cred_t cred;
  369 };
  370 
  371 #
  372 #% abortop    dvp     = = =
  373 #
  374 #! abortop cnp  as appropriate.
  375 #
  376 vop_abortop {
  377         IN struct vnode *dvp;
  378         IN struct componentname *cnp;
  379 };
  380 
  381 #
  382 #% inactive   vp      L U U  
  383 #
  384 vop_inactive {
  385         IN LOCKED=YES WILLUNLOCK struct vnode *vp;
  386         IN struct lwp *l;
  387 };
  388 
  389 #
  390 #% reclaim    vp      U U U
  391 #
  392 vop_reclaim {
  393         IN LOCKED=NO struct vnode *vp;
  394         IN struct lwp *l;
  395 };
  396 
  397 #
  398 #% lock               vp      U L U
  399 #
  400 vop_lock {
  401         IN LOCKED=NO struct vnode *vp;
  402         IN int flags;
  403 };
  404 
  405 #
  406 #% unlock     vp      L U L
  407 #
  408 vop_unlock {
  409         IN LOCKED=YES struct vnode *vp;
  410         IN int flags;
  411 };
  412 
  413 #
  414 #% bmap               vp      = = =
  415 #% bmap               vpp     - U -
  416 #
  417 vop_bmap {
  418         IN struct vnode *vp;
  419         IN daddr_t bn;
  420         OUT struct vnode **vpp;
  421         IN daddr_t *bnp;
  422         OUT int *runp;
  423 };
  424 
  425 #
  426 #% strategy   vp      = = =
  427 #
  428 vop_strategy {
  429         IN struct vnode *vp;
  430         IN struct buf *bp;
  431 };
  432 
  433 #
  434 #% print      vp      = = =
  435 #
  436 vop_print {
  437         IN struct vnode *vp;
  438 };
  439 
  440 #
  441 #% islocked   vp      = = =
  442 #
  443 vop_islocked {
  444         IN struct vnode *vp;
  445 };
  446 
  447 #
  448 #% pathconf   vp      L L L
  449 #
  450 vop_pathconf {
  451         IN LOCKED=YES struct vnode *vp;
  452         IN int name;
  453         OUT register_t *retval;
  454 };
  455 
  456 #
  457 #% advlock    vp      U U U
  458 #
  459 vop_advlock {
  460         IN LOCKED=NO struct vnode *vp;
  461         IN void *id;
  462         IN int op;
  463         IN struct flock *fl;
  464         IN int flags;
  465 };
  466 
  467 # 
  468 #% lease      vp      = = =
  469 # 
  470 vop_lease {
  471         IN struct vnode *vp;
  472         IN struct lwp *l;
  473         IN kauth_cred_t cred;
  474         IN int flag;
  475 };
  476 
  477 #
  478 #% whiteout   dvp     L L L
  479 #% whiteout   cnp     - - -
  480 #% whiteout   flag    - - -
  481 #
  482 #! whiteout cnp CREATE, LOCKPARENT
  483 # 
  484 vop_whiteout {
  485         IN LOCKED=YES struct vnode *dvp;
  486         IN struct componentname *cnp;
  487         IN int flags;
  488 };
  489 
  490 #
  491 # Needs work: no vp?
  492 #
  493 #vop_bwrite {
  494 #       IN struct buf *bp;
  495 #};
  496 
  497 #
  498 #% getpages     vp = = =
  499 #
  500 vop_getpages {
  501         IN struct vnode *vp;
  502         IN voff_t offset;
  503         IN struct vm_page **m;
  504         IN int *count;
  505         IN int centeridx;
  506         IN vm_prot_t access_type;
  507         IN int advice;
  508         IN int flags;
  509 };
  510 
  511 #
  512 #% putpages     vp = = =
  513 #
  514 vop_putpages {
  515         IN struct vnode *vp;
  516         IN voff_t offlo;
  517         IN voff_t offhi;
  518         IN int flags;
  519 };
  520 
  521 #
  522 #% closeextattr vp L L L
  523 #
  524 vop_closeextattr {
  525         IN LOCKED=YES struct vnode *vp;
  526         IN int commit;
  527         IN kauth_cred_t cred;
  528         IN struct lwp *l;
  529 };
  530 
  531 #
  532 #% getextattr   vp L L L
  533 #
  534 vop_getextattr {
  535         IN LOCKED=YES struct vnode *vp;
  536         IN int attrnamespace;
  537         IN const char *name;
  538         INOUT struct uio *uio;
  539         OUT size_t *size;
  540         IN kauth_cred_t cred;
  541         IN struct lwp *l;
  542 };
  543 
  544 #
  545 #% listextattr  vp L L L
  546 #
  547 vop_listextattr {
  548         IN LOCKED=YES struct vnode *vp;
  549         IN int attrnamespace;
  550         INOUT struct uio *uio;
  551         OUT size_t *size;
  552         IN kauth_cred_t cred;
  553         IN struct lwp *l;
  554 };
  555 
  556 #
  557 #% openextattr  vp L L L
  558 #
  559 vop_openextattr {
  560         IN LOCKED=YES struct vnode *vp;
  561         IN kauth_cred_t cred;
  562         IN struct lwp *l;
  563 };
  564 
  565 #
  566 #% deleteextattr vp L L L
  567 #
  568 vop_deleteextattr {
  569         IN LOCKED=YES struct vnode *vp;
  570         IN int attrnamespace;
  571         IN const char *name;
  572         IN kauth_cred_t cred;
  573         IN struct lwp *l;
  574 };
  575 
  576 #
  577 #% setextattr   vp L L L
  578 #
  579 vop_setextattr {
  580         IN LOCKED=YES struct vnode *vp;
  581         IN int attrnamespace;
  582         IN const char *name;
  583         INOUT struct uio *uio;
  584         IN kauth_cred_t cred;
  585         IN struct lwp *l;
  586 };

Cache object: bab3f726857806f7d61987fd0e47c27e


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.