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.84 2022/05/03 08:33:59 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. Neither the name of the University nor the names of its contributors
   15 #    may be used to endorse or promote products derived from this software
   16 #    without specific prior written permission.
   17 #
   18 # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   19 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   20 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   21 # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   22 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   23 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   24 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   25 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   26 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   27 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   28 # SUCH DAMAGE.
   29 #
   30 #       @(#)vnode_if.src        8.14 (Berkeley) 8/6/95
   31 #
   32 #
   33 
   34 # 
   35 # Above each of the vop descriptors is a specification of the locking
   36 # protocol used by each vop call.  The first column is the name of
   37 # the variable, the remaining three columns are in, out and error
   38 # respectively.  The "in" column defines the lock state on input,
   39 # the "out" column defines the state on successful return, and the
   40 # "error" column defines the locking state on error exit.
   41 #     
   42 # The locking value can take the following values:
   43 # L: locked.
   44 # U: unlocked.
   45 # -: not applicable.  vnode does not yet (or no longer) exists.
   46 # =: the same on input and output, may be either L or U.
   47 # X: locked if not nil.
   48 #
   49 # For operations other than VOP_LOOKUP which require a component name
   50 # parameter, the flags required for the initial namei() call are listed.
   51 # Additional flags may be added to the namei() call, but these are required.
   52 #     
   53 
   54 #
   55 #% bwrite     vp      = = =
   56 #
   57 vop_bwrite {
   58         IN struct vnode *vp;
   59         IN struct buf *bp;
   60 };
   61 
   62 #
   63 #% parsepath  dvp     = = =
   64 #
   65 vop_parsepath {
   66         FSTRANS=NO
   67         IN struct vnode *dvp;
   68         IN const char *name;
   69         OUT size_t *retval;
   70 };
   71  
   72 #
   73 #% lookup     dvp     L L L
   74 #% lookup     vpp     - U -
   75 #
   76 #    Note especially that *vpp may equal dvp.
   77 #
   78 #    More details:
   79 #     All lookups find the named node (creating the vnode if needed) and
   80 #          return it, referenced and unlocked, in *vpp.
   81 #     On failure, *vpp is NULL, and *dvp is left locked.
   82 #
   83 vop_lookup {
   84         VERSION 2
   85         IN LOCKED=YES struct vnode *dvp;
   86         OUT WILLMAKE struct vnode **vpp;
   87         IN struct componentname *cnp;
   88 };
   89 
   90 #
   91 #% create     dvp     L L L
   92 #% create     vpp     - U -
   93 #
   94 #! create cnp   CREATE, LOCKPARENT
   95 #
   96 vop_create {
   97         VERSION 3
   98         POST=vop_create_post
   99         IN LOCKED=EXCL struct vnode *dvp;
  100         OUT WILLMAKE struct vnode **vpp;
  101         IN struct componentname *cnp;
  102         IN struct vattr *vap;
  103 };
  104 
  105 #
  106 #% mknod      dvp     L L L
  107 #% mknod      vpp     - U -
  108 #
  109 #! mknod cnp    CREATE, LOCKPARENT
  110 #
  111 vop_mknod {
  112         VERSION 3
  113         POST=vop_mknod_post
  114         IN LOCKED=EXCL struct vnode *dvp;
  115         OUT WILLMAKE struct vnode **vpp;
  116         IN struct componentname *cnp;
  117         IN struct vattr *vap;
  118 };
  119 
  120 #
  121 #% open               vp      L L L
  122 #
  123 vop_open {
  124         POST=vop_open_post
  125         IN LOCKED=YES struct vnode *vp;
  126         IN int mode;
  127         IN kauth_cred_t cred;
  128 };
  129 
  130 #
  131 #% close      vp      L L L
  132 #
  133 vop_close {
  134         POST=vop_close_post
  135         IN LOCKED=YES struct vnode *vp;
  136         IN int fflag;
  137         IN kauth_cred_t cred;
  138 };
  139 
  140 #
  141 #% access     vp      L L L
  142 #
  143 vop_access {
  144         IN LOCKED=YES struct vnode *vp;
  145         IN accmode_t accmode;
  146         IN kauth_cred_t cred;
  147 };
  148 
  149 #
  150 #% accessx    vp      L L L
  151 #
  152 vop_accessx {
  153         IN LOCKED=YES struct vnode *vp;
  154         IN accmode_t accmode;
  155         IN kauth_cred_t cred;
  156 };
  157 
  158 #
  159 #% getattr    vp      L L L
  160 #
  161 vop_getattr {
  162         IN LOCKED=YES struct vnode *vp;
  163         IN struct vattr *vap;
  164         IN kauth_cred_t cred;
  165 };
  166 
  167 #
  168 #% setattr    vp      L L L
  169 #
  170 vop_setattr {
  171         PRE=vop_setattr_pre
  172         POST=vop_setattr_post
  173         IN LOCKED=EXCL struct vnode *vp;
  174         IN struct vattr *vap;
  175         IN kauth_cred_t cred;
  176 };
  177 
  178 #
  179 #% read               vp      L L L
  180 #
  181 vop_read {
  182         POST=vop_read_post
  183         IN LOCKED=YES struct vnode *vp;
  184         INOUT struct uio *uio;
  185         IN int ioflag;
  186         IN kauth_cred_t cred;
  187 };
  188 
  189 #
  190 #% write      vp      L L L
  191 #
  192 vop_write {
  193         PRE=vop_write_pre
  194         POST=vop_write_post
  195         IN LOCKED=YES struct vnode *vp;
  196         INOUT struct uio *uio;
  197         IN int ioflag;
  198         IN kauth_cred_t cred;
  199 };
  200 
  201 #
  202 #% fallocate  vp      L L L
  203 #
  204 vop_fallocate {
  205         IN LOCKED=YES struct vnode *vp;
  206         IN off_t pos;
  207         IN off_t len;
  208 };
  209 
  210 #
  211 #% fdiscard   vp      L L L
  212 #
  213 vop_fdiscard {
  214         IN LOCKED=YES struct vnode *vp;
  215         IN off_t pos;
  216         IN off_t len;
  217 };
  218 
  219 #
  220 #% ioctl      vp      U U U
  221 #
  222 vop_ioctl {
  223         FSTRANS=NO
  224         IN LOCKED=NO struct vnode *vp;
  225         IN u_long command;
  226         IN void *data;
  227         IN int fflag;
  228         IN kauth_cred_t cred;
  229 };
  230 
  231 #
  232 #% fcntl      vp      U U U
  233 #
  234 vop_fcntl {
  235         FSTRANS=NO
  236         IN LOCKED=NO struct vnode *vp;
  237         IN u_int command;
  238         IN void *data;
  239         IN int fflag;
  240         IN kauth_cred_t cred;
  241 };
  242 
  243 #
  244 #% poll     vp      U U U
  245 #
  246 vop_poll {
  247         IN LOCKED=NO struct vnode *vp;
  248         IN int events;
  249 };
  250 
  251 #
  252 #% kqfilter     vp      U U U
  253 #
  254 vop_kqfilter {
  255         IN LOCKED=NO struct vnode *vp;
  256         IN struct knote *kn;
  257 };
  258 
  259 #
  260 #% revoke     vp      U U U
  261 #
  262 vop_revoke {
  263         FSTRANS=NO
  264         IN LOCKED=NO struct vnode *vp;
  265         IN int flags;
  266 };
  267 
  268 #     
  269 #% mmap      vp      = = =
  270 #
  271 vop_mmap {
  272         IN struct vnode *vp;
  273         IN vm_prot_t prot;
  274         IN kauth_cred_t cred;
  275 };
  276 
  277 #
  278 #% fsync      vp      L L L
  279 #
  280 vop_fsync {
  281         IN LOCKED=YES struct vnode *vp;
  282         IN kauth_cred_t cred;
  283         IN int flags;
  284         IN off_t offlo;
  285         IN off_t offhi;
  286 };
  287 
  288 #
  289 # Needs work: Is newoff right?  What's it mean?
  290 # XXX Locking protocol?
  291 #
  292 vop_seek {
  293         IN struct vnode *vp;
  294         IN off_t oldoff;
  295         IN off_t newoff;
  296         IN kauth_cred_t cred;
  297 };
  298 
  299 #
  300 #% remove     dvp     L L L
  301 #% remove     vp      L U U
  302 #
  303 #! remove cnp   DELETE, LOCKPARENT | LOCKLEAF
  304 #
  305 vop_remove {
  306         VERSION 3
  307         PRE=vop_remove_pre
  308         POST=vop_remove_post
  309         IN LOCKED=EXCL struct vnode *dvp;
  310         IN LOCKED=YES WILLPUT struct vnode *vp;
  311         IN struct componentname *cnp;
  312         CONTEXT nlink_t vp_new_nlink;
  313 };
  314 
  315 #
  316 #% link               dvp     L L L
  317 #% link               vp      U U U
  318 #
  319 #! link  cnp    CREATE, LOCKPARENT
  320 #
  321 vop_link {
  322         VERSION 2
  323         POST=vop_link_post
  324         IN LOCKED=EXCL struct vnode *dvp;
  325         IN LOCKED=NO struct vnode *vp;
  326         IN struct componentname *cnp;
  327 };
  328 
  329 #
  330 #% rename     fdvp    U U U
  331 #% rename     fvp     U U U
  332 #% rename     tdvp    L U U
  333 #% rename     tvp     X U U
  334 #
  335 #! rename fcnp  DELETE, LOCKPARENT
  336 #! rename tcnp  RENAME, LOCKPARENT | LOCKLEAF | NOCACHE
  337 #
  338 vop_rename {
  339         IN WILLRELE struct vnode *fdvp;
  340         IN WILLRELE struct vnode *fvp;
  341         IN struct componentname *fcnp;
  342         IN LOCKED=YES WILLPUT struct vnode *tdvp;
  343         IN WILLPUT struct vnode *tvp;
  344         IN struct componentname *tcnp;
  345 };
  346 
  347 #
  348 #% mkdir      dvp     L L L
  349 #% mkdir      vpp     - U - 
  350 #
  351 #! mkdir cnp    CREATE, LOCKPARENT
  352 #
  353 vop_mkdir {
  354         VERSION 3
  355         POST=vop_mkdir_post
  356         IN LOCKED=EXCL struct vnode *dvp;
  357         OUT WILLMAKE struct vnode **vpp;
  358         IN struct componentname *cnp;
  359         IN struct vattr *vap;
  360 };
  361 
  362 #
  363 #% rmdir      dvp     L L L
  364 #% rmdir      vp      L U U
  365 #
  366 #! rmdir cnp    DELETE, LOCKPARENT | LOCKLEAF
  367 #
  368 vop_rmdir {
  369         VERSION 2
  370         PRE=vop_rmdir_pre
  371         POST=vop_rmdir_post
  372         IN LOCKED=EXCL struct vnode *dvp;
  373         IN LOCKED=EXCL WILLPUT struct vnode *vp;
  374         IN struct componentname *cnp;
  375 };
  376 
  377 #
  378 #% symlink    dvp     L L L
  379 #% symlink    vpp     - U -
  380 #
  381 #! symlink cnp  CREATE, LOCKPARENT
  382 #
  383 vop_symlink {
  384         VERSION 3
  385         POST=vop_symlink_post
  386         IN LOCKED=EXCL struct vnode *dvp;
  387         OUT WILLMAKE struct vnode **vpp;
  388         IN struct componentname *cnp;
  389         IN struct vattr *vap;
  390         IN char *target;
  391 };
  392 
  393 #
  394 #% readdir    vp      L L L   
  395 #
  396 vop_readdir {
  397         IN LOCKED=YES struct vnode *vp;
  398         INOUT struct uio *uio;
  399         IN kauth_cred_t cred;
  400         OUT int *eofflag;
  401         OUT off_t **cookies;
  402         IN int *ncookies;
  403 };
  404 
  405 #
  406 #% readlink   vp      L L L
  407 #
  408 vop_readlink {
  409         IN LOCKED=YES struct vnode *vp;
  410         INOUT struct uio *uio;
  411         IN kauth_cred_t cred;
  412 };
  413 
  414 #
  415 #% abortop    dvp     = = =
  416 #
  417 #! abortop cnp  as appropriate.
  418 #
  419 vop_abortop {
  420         IN struct vnode *dvp;
  421         IN struct componentname *cnp;
  422 };
  423 
  424 #
  425 #% inactive   vp      L L L
  426 #
  427 vop_inactive {
  428         VERSION 2
  429         IN LOCKED=EXCL struct vnode *vp;
  430         INOUT bool *recycle;
  431 };
  432 
  433 #
  434 #% reclaim    vp      L U U
  435 #
  436 vop_reclaim {
  437         VERSION 2
  438         FSTRANS=NO
  439         IN LOCKED=EXCL struct vnode *vp;
  440 };
  441 
  442 #
  443 #% lock               vp      U L U
  444 #
  445 vop_lock {
  446         FSTRANS=LOCK
  447         IN struct vnode *vp;
  448         IN int flags;
  449 };
  450 
  451 #
  452 #% unlock     vp      L U L
  453 #
  454 vop_unlock {
  455         FSTRANS=UNLOCK
  456         IN LOCKED=YES struct vnode *vp;
  457 };
  458 
  459 #
  460 #% bmap               vp      = = =
  461 #% bmap               vpp     - U -
  462 #
  463 vop_bmap {
  464         IN struct vnode *vp;
  465         IN daddr_t bn;
  466         OUT struct vnode **vpp;
  467         IN daddr_t *bnp;
  468         OUT int *runp;
  469 };
  470 
  471 #
  472 #% strategy   vp      = = =
  473 #
  474 vop_strategy {
  475         FSTRANS=NO
  476         IN struct vnode *vp;
  477         IN struct buf *bp;
  478 };
  479 
  480 #
  481 #% print      vp      = = =
  482 #
  483 vop_print {
  484         IN struct vnode *vp;
  485 };
  486 
  487 #
  488 #% islocked   vp      = = =
  489 #
  490 vop_islocked {
  491         FSTRANS=NO
  492         IN struct vnode *vp;
  493 };
  494 
  495 #
  496 #% pathconf   vp      L L L
  497 #
  498 vop_pathconf {
  499         IN LOCKED=YES struct vnode *vp;
  500         IN int name;
  501         OUT register_t *retval;
  502 };
  503 
  504 #
  505 #% advlock    vp      U U U
  506 #
  507 vop_advlock {
  508         FSTRANS=NO
  509         IN LOCKED=NO struct vnode *vp;
  510         IN void *id;
  511         IN int op;
  512         IN struct flock *fl;
  513         IN int flags;
  514 };
  515 
  516 #
  517 #% whiteout   dvp     L L L
  518 #% whiteout   cnp     - - -
  519 #% whiteout   flag    - - -
  520 #
  521 #! whiteout cnp CREATE, LOCKPARENT
  522 # 
  523 vop_whiteout {
  524         IN LOCKED=EXCL struct vnode *dvp;
  525         IN struct componentname *cnp;
  526         IN int flags;
  527 };
  528 
  529 #
  530 #% getpages     vp = = =
  531 #
  532 vop_getpages {
  533         FSTRANS=NO
  534         IN struct vnode *vp;
  535         IN voff_t offset;
  536         IN struct vm_page **m;
  537         IN int *count;
  538         IN int centeridx;
  539         IN vm_prot_t access_type;
  540         IN int advice;
  541         IN int flags;
  542 };
  543 
  544 #
  545 #% putpages     vp = = =
  546 #
  547 vop_putpages {
  548         FSTRANS=NO
  549         IN struct vnode *vp;
  550         IN voff_t offlo;
  551         IN voff_t offhi;
  552         IN int flags;
  553 };
  554 
  555 #
  556 #% getacl       vp L L L
  557 #
  558 vop_getacl {
  559         IN struct vnode *vp;
  560         IN acl_type_t type;
  561         OUT struct acl *aclp;
  562         IN kauth_cred_t cred;
  563 };
  564 
  565 #
  566 #% setacl       vp L L L
  567 #
  568 vop_setacl {
  569         POST=vop_setacl_post
  570         IN LOCKED=EXCL struct vnode *vp;
  571         IN acl_type_t type;
  572         IN struct acl *aclp;
  573         IN kauth_cred_t cred;
  574 };
  575 
  576 #
  577 #% aclcheck     vp = = =
  578 #
  579 vop_aclcheck {
  580         IN struct vnode *vp;
  581         IN acl_type_t type;
  582         IN struct acl *aclp;
  583         IN kauth_cred_t cred;
  584 };
  585 
  586 #
  587 #% closeextattr vp L L L
  588 #
  589 vop_closeextattr {
  590         IN LOCKED=YES struct vnode *vp;
  591         IN int commit;
  592         IN kauth_cred_t cred;
  593 };
  594 
  595 #
  596 #% getextattr   vp L L L
  597 #
  598 vop_getextattr {
  599         IN LOCKED=YES struct vnode *vp;
  600         IN int attrnamespace;
  601         IN const char *name;
  602         INOUT struct uio *uio;
  603         OUT size_t *size;
  604         IN kauth_cred_t cred;
  605 };
  606 
  607 #
  608 #% listextattr  vp L L L
  609 #
  610 vop_listextattr {
  611         IN LOCKED=YES struct vnode *vp;
  612         IN int attrnamespace;
  613         INOUT struct uio *uio;
  614         OUT size_t *size;
  615         IN int flag;
  616         IN kauth_cred_t cred;
  617 };
  618 
  619 #
  620 #% openextattr  vp L L L
  621 #
  622 vop_openextattr {
  623         IN LOCKED=YES struct vnode *vp;
  624         IN kauth_cred_t cred;
  625 };
  626 
  627 #
  628 #% deleteextattr vp L L L
  629 #
  630 vop_deleteextattr {
  631         IN LOCKED=EXCL struct vnode *vp;
  632         IN int attrnamespace;
  633         IN const char *name;
  634         IN kauth_cred_t cred;
  635 };
  636 
  637 #
  638 #% setextattr   vp L L L
  639 #
  640 vop_setextattr {
  641         IN LOCKED=EXCL struct vnode *vp;
  642         IN int attrnamespace;
  643         IN const char *name;
  644         INOUT struct uio *uio;
  645         IN kauth_cred_t cred;
  646 };

Cache object: 7517ad43a485629734082de574b72639


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