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

Cache object: 0bb259d248591eb7a35e445d9b619269


[ 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.