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 #-
    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 # 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.
   16 #
   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.
   28 #
   29 #       @(#)vnode_if.src        8.12 (Berkeley) 5/14/95
   30 # $FreeBSD: src/sys/kern/vnode_if.src,v 1.67.2.1 2005/01/31 23:26:19 imp Exp $
   31 #
   32 
   33 #
   34 # Above each of the vop descriptors is a specification of the locking
   35 # protocol used by each vop call.  The first column is the name of
   36 # the variable, the remaining three columns are in, out and error
   37 # respectively.  The "in" column defines the lock state on input,
   38 # the "out" column defines the state on succesful return, and the
   39 # "error" column defines the locking state on error exit.
   40 #
   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.
   51 #
   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 !
   54 #
   55 # If other such parameters are introduced, they have to be added to
   56 # the AWK script at the head of the definition of "add_debug_code()".
   57 #
   58 
   59 #
   60 # islocked      vp      = = =
   61 #
   62 vop_islocked {
   63         IN struct vnode *vp;
   64         IN struct thread *td;
   65 };
   66 
   67 #
   68 # lookup        dvp     L ? ?
   69 # lookup        vpp     - L -
   70 #! lookup       pre     vop_lookup_pre
   71 #! lookup       post    vop_lookup_post
   72 #
   73 # XXX - the lookup locking protocol defies simple description and depends
   74 #       on the flags and operation fields in the (cnp) structure.  Note
   75 #       especially that *vpp may equal dvp and both may be locked.
   76 #
   77 vop_lookup {
   78         IN struct vnode *dvp;
   79         INOUT struct vnode **vpp;
   80         IN struct componentname *cnp;
   81 };
   82 
   83 #
   84 #% cachedlookup dvp     L ? ?
   85 #% cachedlookup vpp     - L -
   86 #
   87 # This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
   88 #
   89 vop_cachedlookup {
   90         IN struct vnode *dvp;
   91         INOUT struct vnode **vpp;
   92         IN struct componentname *cnp;
   93 };
   94 
   95 #
   96 #% create       dvp     L L L
   97 #% create       vpp     - L -
   98 #
   99 vop_create {
  100         IN struct vnode *dvp;
  101         OUT struct vnode **vpp;
  102         IN struct componentname *cnp;
  103         IN struct vattr *vap;
  104 };
  105 
  106 #
  107 #% whiteout     dvp     L L L
  108 #
  109 vop_whiteout {
  110         IN struct vnode *dvp;
  111         IN struct componentname *cnp;
  112         IN int flags;
  113 };
  114 
  115 #
  116 #% mknod        dvp     L L L
  117 #% mknod        vpp     - L -
  118 #
  119 vop_mknod {
  120         IN struct vnode *dvp;
  121         OUT struct vnode **vpp;
  122         IN struct componentname *cnp;
  123         IN struct vattr *vap;
  124 };
  125 
  126 #
  127 #% open         vp      L L L
  128 #
  129 vop_open {
  130         IN struct vnode *vp;
  131         IN int mode;
  132         IN struct ucred *cred;
  133         IN struct thread *td;
  134         IN int fdidx;
  135 };
  136 
  137 #
  138 #% close        vp      U U U
  139 #
  140 vop_close {
  141         IN struct vnode *vp;
  142         IN int fflag;
  143         IN struct ucred *cred;
  144         IN struct thread *td;
  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 thread *td;
  155 };
  156 
  157 #
  158 #% getattr      vp      L L L
  159 #
  160 vop_getattr {
  161         IN struct vnode *vp;
  162         OUT struct vattr *vap;
  163         IN struct ucred *cred;
  164         IN struct thread *td;
  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 thread *td;
  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 #% lease        vp      = = =
  199 #
  200 vop_lease {
  201         IN struct vnode *vp;
  202         IN struct thread *td;
  203         IN struct ucred *cred;
  204         IN int flag;
  205 };
  206 
  207 #
  208 #% ioctl        vp      U U U
  209 #
  210 vop_ioctl {
  211         IN struct vnode *vp;
  212         IN u_long command;
  213         IN caddr_t data;
  214         IN int fflag;
  215         IN struct ucred *cred;
  216         IN struct thread *td;
  217 };
  218 
  219 #
  220 #% poll vp      U U U
  221 #
  222 vop_poll {
  223         IN struct vnode *vp;
  224         IN int events;
  225         IN struct ucred *cred;
  226         IN struct thread *td;
  227 };
  228 
  229 #
  230 #% kqfilter     vp      U U U
  231 #
  232 vop_kqfilter {
  233         IN struct vnode *vp;
  234         IN struct knote *kn;
  235 };
  236 
  237 #
  238 #% revoke       vp      U U U
  239 #
  240 vop_revoke {
  241         IN struct vnode *vp;
  242         IN int flags;
  243 };
  244 
  245 #
  246 #% fsync        vp      L L L
  247 #
  248 vop_fsync {
  249         IN struct vnode *vp;
  250         IN struct ucred *cred;
  251         IN int waitfor;
  252         IN struct thread *td;
  253 };
  254 
  255 #
  256 #% remove       dvp     L L L
  257 #% remove       vp      L L L
  258 #
  259 vop_remove {
  260         IN struct vnode *dvp;
  261         IN struct vnode *vp;
  262         IN struct componentname *cnp;
  263 };
  264 
  265 #
  266 #% link         tdvp    L L L
  267 #% link         vp      L L L
  268 #
  269 vop_link {
  270         IN struct vnode *tdvp;
  271         IN struct vnode *vp;
  272         IN struct componentname *cnp;
  273 };
  274 
  275 #
  276 # rename        fdvp    U U U
  277 # rename        fvp     U U U
  278 # rename        tdvp    L U U
  279 # rename        tvp     X U U
  280 #! rename       pre     vop_rename_pre
  281 #
  282 vop_rename {
  283         IN WILLRELE struct vnode *fdvp;
  284         IN WILLRELE struct vnode *fvp;
  285         IN struct componentname *fcnp;
  286         IN WILLRELE struct vnode *tdvp;
  287         IN WILLRELE struct vnode *tvp;
  288         IN struct componentname *tcnp;
  289 };
  290 
  291 #
  292 #% mkdir        dvp     L L L
  293 #% mkdir        vpp     - L -
  294 #
  295 vop_mkdir {
  296         IN struct vnode *dvp;
  297         OUT struct vnode **vpp;
  298         IN struct componentname *cnp;
  299         IN struct vattr *vap;
  300 };
  301 
  302 #
  303 #% rmdir        dvp     L L L
  304 #% rmdir        vp      L L L
  305 #
  306 vop_rmdir {
  307         IN struct vnode *dvp;
  308         IN struct vnode *vp;
  309         IN struct componentname *cnp;
  310 };
  311 
  312 #
  313 #% symlink      dvp     L L L
  314 #% symlink      vpp     - L -
  315 #
  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;
  322 };
  323 
  324 #
  325 #% readdir      vp      L L L
  326 #
  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;
  334 };
  335 
  336 #
  337 #% readlink     vp      L L L
  338 #
  339 vop_readlink {
  340         IN struct vnode *vp;
  341         INOUT struct uio *uio;
  342         IN struct ucred *cred;
  343 };
  344 
  345 #
  346 #% inactive     vp      L U U
  347 #
  348 vop_inactive {
  349         IN struct vnode *vp;
  350         IN struct thread *td;
  351 };
  352 
  353 #
  354 #% reclaim      vp      U U U
  355 #
  356 vop_reclaim {
  357         IN struct vnode *vp;
  358         IN struct thread *td;
  359 };
  360 
  361 #
  362 #lock           vp      ? ? ?
  363 #! lock         pre     vop_lock_pre
  364 #! lock         post    vop_lock_post
  365 #
  366 vop_lock {
  367         IN struct vnode *vp;
  368         IN int flags;
  369         IN struct thread *td;
  370 };
  371 
  372 #
  373 #unlock         vp      L ? L
  374 #! unlock       pre     vop_unlock_pre
  375 #! unlock       post    vop_unlock_post
  376 #
  377 vop_unlock {
  378         IN struct vnode *vp;
  379         IN int flags;
  380         IN struct thread *td;
  381 };
  382 
  383 #
  384 #% bmap         vp      L L L
  385 #% bmap         vpp     - U -
  386 #
  387 vop_bmap {
  388         IN struct vnode *vp;
  389         IN daddr_t bn;
  390         OUT struct vnode **vpp;
  391         IN daddr_t *bnp;
  392         OUT int *runp;
  393         OUT int *runb;
  394 };
  395 
  396 #
  397 # strategy      vp      L L L
  398 #! strategy     pre     vop_strategy_pre
  399 #
  400 vop_strategy {
  401         IN struct vnode *vp;
  402         IN struct buf *bp;
  403 };
  404 
  405 #
  406 # specstrategy  vp      L L L
  407 #! specstrategy pre     vop_strategy_pre
  408 #
  409 vop_specstrategy {
  410         IN struct vnode *vp;
  411         IN struct buf *bp;
  412 };
  413 
  414 #
  415 #% getwritemount vp     = = =
  416 #
  417 vop_getwritemount {
  418         IN struct vnode *vp;
  419         OUT struct mount **mpp;
  420 };
  421 
  422 #
  423 #% print        vp      = = =
  424 #
  425 vop_print {
  426         IN struct vnode *vp;
  427 };
  428 
  429 #
  430 #% pathconf     vp      L L L
  431 #
  432 vop_pathconf {
  433         IN struct vnode *vp;
  434         IN int name;
  435         OUT register_t *retval;
  436 };
  437 
  438 #
  439 #% advlock      vp      U U U
  440 #
  441 vop_advlock {
  442         IN struct vnode *vp;
  443         IN caddr_t id;
  444         IN int op;
  445         IN struct flock *fl;
  446         IN int flags;
  447 };
  448 
  449 #
  450 #% reallocblks  vp      L L L
  451 #
  452 vop_reallocblks {
  453         IN struct vnode *vp;
  454         IN struct cluster_save *buflist;
  455 };
  456 
  457 #
  458 #% getpages     vp      L L L
  459 #
  460 vop_getpages {
  461         IN struct vnode *vp;
  462         IN vm_page_t *m;
  463         IN int count;
  464         IN int reqpage;
  465         IN vm_ooffset_t offset;
  466 };
  467 
  468 #
  469 #% putpages     vp      L L L
  470 #
  471 vop_putpages {
  472         IN struct vnode *vp;
  473         IN vm_page_t *m;
  474         IN int count;
  475         IN int sync;
  476         IN int *rtvals;
  477         IN vm_ooffset_t offset;
  478 };
  479 
  480 #
  481 #% freeblks     vp      - - -
  482 #
  483 # This call is used by the filesystem to release blocks back to 
  484 # device-driver.  This is useful if the driver has a lengthy 
  485 # erase handling or similar.
  486 #
  487 
  488 vop_freeblks {
  489         IN struct vnode *vp;
  490         IN daddr_t addr;
  491         IN daddr_t length;
  492 };
  493 
  494 #
  495 #% getacl       vp      L L L
  496 #
  497 vop_getacl {
  498         IN struct vnode *vp;
  499         IN acl_type_t type;
  500         OUT struct acl *aclp;
  501         IN struct ucred *cred;
  502         IN struct thread *td;
  503 };
  504 
  505 #
  506 #% setacl       vp      L L L
  507 #
  508 vop_setacl {
  509         IN struct vnode *vp;
  510         IN acl_type_t type;
  511         IN struct acl *aclp;
  512         IN struct ucred *cred;
  513         IN struct thread *td;
  514 };
  515 
  516 #
  517 #% aclcheck     vp      = = =
  518 #
  519 vop_aclcheck {
  520         IN struct vnode *vp;
  521         IN acl_type_t type;
  522         IN struct acl *aclp;
  523         IN struct ucred *cred;
  524         IN struct thread *td;
  525 };
  526 
  527 #
  528 #% closeextattr vp      L L L
  529 #
  530 vop_closeextattr {
  531         IN struct vnode *vp;
  532         IN int commit;
  533         IN struct ucred *cred;
  534         IN struct thread *td;
  535 };
  536 
  537 #
  538 #% getextattr   vp      L L L
  539 #
  540 vop_getextattr {
  541         IN struct vnode *vp;
  542         IN int attrnamespace;
  543         IN const char *name;
  544         INOUT struct uio *uio;
  545         OUT size_t *size;
  546         IN struct ucred *cred;
  547         IN struct thread *td;
  548 };
  549 
  550 #
  551 #% listextattr  vp      L L L
  552 #
  553 vop_listextattr {
  554         IN struct vnode *vp;
  555         IN int attrnamespace;
  556         INOUT struct uio *uio;
  557         OUT size_t *size;
  558         IN struct ucred *cred;
  559         IN struct thread *td;
  560 };
  561 
  562 #
  563 #% openextattr  vp      L L L
  564 #
  565 vop_openextattr {
  566         IN struct vnode *vp;
  567         IN struct ucred *cred;
  568         IN struct thread *td;
  569 };
  570 
  571 #
  572 #% deleteextattr        vp      L L L
  573 #
  574 vop_deleteextattr {
  575         IN struct vnode *vp;
  576         IN int attrnamespace;
  577         IN const char *name;
  578         IN struct ucred *cred;
  579         IN struct thread *td;
  580 };
  581 
  582 #
  583 #% setextattr   vp      L L L
  584 #
  585 vop_setextattr {
  586         IN struct vnode *vp;
  587         IN int attrnamespace;
  588         IN const char *name;
  589         INOUT struct uio *uio;
  590         IN struct ucred *cred;
  591         IN struct thread *td;
  592 };
  593 
  594 #
  595 #% createvobject        vp      L L L
  596 #
  597 vop_createvobject {
  598         IN struct vnode *vp;
  599         IN struct ucred *cred;
  600         IN struct thread *td;
  601 };
  602 
  603 #
  604 #% destroyvobject       vp      L L L
  605 #
  606 vop_destroyvobject {
  607         IN struct vnode *vp;
  608 };
  609 
  610 #
  611 #% getvobject   vp      L L L
  612 #
  613 vop_getvobject {
  614         IN struct vnode *vp;
  615         OUT struct vm_object **objpp;
  616 };
  617 
  618 #
  619 #% setlabel     vp      L L L
  620 #
  621 vop_setlabel {
  622         IN struct vnode *vp;
  623         IN struct label *label;
  624         IN struct ucred *cred;
  625         IN struct thread *td;
  626 };

Cache object: 363ec3340c7530b11649a71404db0608


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