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: releng/10.0/sys/kern/vnode_if.src 243400 2012-11-22 10:36:10Z avg $
   31 #
   32 
   33 #
   34 # Above each of the vop descriptors in lines starting with %%
   35 # is a specification of the locking protocol used by each vop call.
   36 # The first column is the name of the variable, the remaining three
   37 # columns are in, out and error respectively.  The "in" column defines
   38 # the lock state on input, the "out" column defines the state on succesful
   39 # return, and the "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-coded in vnode_if.awk !
   54 #
   55 # Lines starting with %! specify a pre or post-condition function
   56 # to call before/after the vop call.
   57 #
   58 # If other such parameters are introduced, they have to be added to
   59 # the AWK script at the head of the definition of "add_debug_code()".
   60 #
   61 
   62 vop_islocked {
   63         IN struct vnode *vp;
   64 };
   65 
   66 %% lookup       dvp     L L L
   67 %% lookup       vpp     - L -
   68 
   69 # XXX - the lookup locking protocol defies simple description and depends
   70 #       on the flags and operation fields in the (cnp) structure.  Note
   71 #       especially that *vpp may equal dvp and both may be locked.
   72 
   73 vop_lookup {
   74         IN struct vnode *dvp;
   75         INOUT struct vnode **vpp;
   76         IN struct componentname *cnp;
   77 };
   78 
   79 %% cachedlookup dvp     L L L
   80 %% cachedlookup vpp     - L -
   81 
   82 # This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
   83 
   84 vop_cachedlookup {
   85         IN struct vnode *dvp;
   86         INOUT struct vnode **vpp;
   87         IN struct componentname *cnp;
   88 };
   89 
   90 %% create       dvp     E E E
   91 %% create       vpp     - L -
   92 %! create       post    vop_create_post
   93 
   94 vop_create {
   95         IN struct vnode *dvp;
   96         OUT struct vnode **vpp;
   97         IN struct componentname *cnp;
   98         IN struct vattr *vap;
   99 };
  100 
  101 
  102 %% whiteout     dvp     E E E
  103 
  104 vop_whiteout {
  105         IN struct vnode *dvp;
  106         IN struct componentname *cnp;
  107         IN int flags;
  108 };
  109 
  110 
  111 %% mknod        dvp     E E E
  112 %% mknod        vpp     - L -
  113 %! mknod        post    vop_mknod_post
  114 
  115 vop_mknod {
  116         IN struct vnode *dvp;
  117         OUT struct vnode **vpp;
  118         IN struct componentname *cnp;
  119         IN struct vattr *vap;
  120 };
  121 
  122 
  123 %% open         vp      L L L
  124 
  125 vop_open {
  126         IN struct vnode *vp;
  127         IN int mode;
  128         IN struct ucred *cred;
  129         IN struct thread *td;
  130         IN struct file *fp;
  131 };
  132 
  133 
  134 %% close        vp      L L L
  135 
  136 vop_close {
  137         IN struct vnode *vp;
  138         IN int fflag;
  139         IN struct ucred *cred;
  140         IN struct thread *td;
  141 };
  142 
  143 
  144 %% access       vp      L L L
  145 
  146 vop_access {
  147         IN struct vnode *vp;
  148         IN accmode_t accmode;
  149         IN struct ucred *cred;
  150         IN struct thread *td;
  151 };
  152 
  153 
  154 %% accessx      vp      L L L
  155 
  156 vop_accessx {
  157         IN struct vnode *vp;
  158         IN accmode_t accmode;
  159         IN struct ucred *cred;
  160         IN struct thread *td;
  161 };
  162 
  163 
  164 %% getattr      vp      L L L
  165 
  166 vop_getattr {
  167         IN struct vnode *vp;
  168         OUT struct vattr *vap;
  169         IN struct ucred *cred;
  170 };
  171 
  172 
  173 %% setattr      vp      E E E
  174 %! setattr      post    vop_setattr_post
  175 
  176 vop_setattr {
  177         IN struct vnode *vp;
  178         IN struct vattr *vap;
  179         IN struct ucred *cred;
  180 };
  181 
  182 %% markatime    vp      L L L
  183 
  184 vop_markatime {
  185         IN struct vnode *vp;
  186 };
  187 
  188 %% read         vp      L L L
  189 
  190 vop_read {
  191         IN struct vnode *vp;
  192         INOUT struct uio *uio;
  193         IN int ioflag;
  194         IN struct ucred *cred;
  195 };
  196 
  197 
  198 %% write        vp      L L L
  199 %! write        pre     VOP_WRITE_PRE
  200 %! write        post    VOP_WRITE_POST
  201 
  202 vop_write {
  203         IN struct vnode *vp;
  204         INOUT struct uio *uio;
  205         IN int ioflag;
  206         IN struct ucred *cred;
  207 };
  208 
  209 
  210 %% ioctl        vp      U U U
  211 
  212 vop_ioctl {
  213         IN struct vnode *vp;
  214         IN u_long command;
  215         IN void *data;
  216         IN int fflag;
  217         IN struct ucred *cred;
  218         IN struct thread *td;
  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 ucred *cred;
  228         IN struct thread *td;
  229 };
  230 
  231 
  232 %% kqfilter     vp      U U U
  233 
  234 vop_kqfilter {
  235         IN struct vnode *vp;
  236         IN struct knote *kn;
  237 };
  238 
  239 
  240 %% revoke       vp      L L L
  241 
  242 vop_revoke {
  243         IN struct vnode *vp;
  244         IN int flags;
  245 };
  246 
  247 
  248 %% fsync        vp      L L L
  249 
  250 vop_fsync {
  251         IN struct vnode *vp;
  252         IN int waitfor;
  253         IN struct thread *td;
  254 };
  255 
  256 
  257 %% remove       dvp     E E E
  258 %% remove       vp      E E E
  259 %! remove       post    vop_remove_post
  260 
  261 vop_remove {
  262         IN struct vnode *dvp;
  263         IN struct vnode *vp;
  264         IN struct componentname *cnp;
  265 };
  266 
  267 
  268 %% link         tdvp    E E E
  269 %% link         vp      E E E
  270 %! link         post    vop_link_post
  271 
  272 vop_link {
  273         IN struct vnode *tdvp;
  274         IN struct vnode *vp;
  275         IN struct componentname *cnp;
  276 };
  277 
  278 
  279 %! rename       pre     vop_rename_pre
  280 %! rename       post    vop_rename_post
  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     E E E
  293 %% mkdir        vpp     - E -
  294 %! mkdir        post    vop_mkdir_post
  295 
  296 vop_mkdir {
  297         IN struct vnode *dvp;
  298         OUT struct vnode **vpp;
  299         IN struct componentname *cnp;
  300         IN struct vattr *vap;
  301 };
  302 
  303 
  304 %% rmdir        dvp     E E E
  305 %% rmdir        vp      E E E
  306 %! rmdir        post    vop_rmdir_post
  307 
  308 vop_rmdir {
  309         IN struct vnode *dvp;
  310         IN struct vnode *vp;
  311         IN struct componentname *cnp;
  312 };
  313 
  314 
  315 %% symlink      dvp     E E E
  316 %% symlink      vpp     - E -
  317 %! symlink      post    vop_symlink_post
  318 
  319 vop_symlink {
  320         IN struct vnode *dvp;
  321         OUT struct vnode **vpp;
  322         IN struct componentname *cnp;
  323         IN struct vattr *vap;
  324         IN char *target;
  325 };
  326 
  327 
  328 %% readdir      vp      L L L
  329 
  330 vop_readdir {
  331         IN struct vnode *vp;
  332         INOUT struct uio *uio;
  333         IN struct ucred *cred;
  334         INOUT int *eofflag;
  335         OUT int *ncookies;
  336         INOUT u_long **cookies;
  337 };
  338 
  339 
  340 %% readlink     vp      L L L
  341 
  342 vop_readlink {
  343         IN struct vnode *vp;
  344         INOUT struct uio *uio;
  345         IN struct ucred *cred;
  346 };
  347 
  348 
  349 %% inactive     vp      E E E
  350 
  351 vop_inactive {
  352         IN struct vnode *vp;
  353         IN struct thread *td;
  354 };
  355 
  356 
  357 %% reclaim      vp      E E E
  358 
  359 vop_reclaim {
  360         IN struct vnode *vp;
  361         IN struct thread *td;
  362 };
  363 
  364 
  365 %! lock1        pre     vop_lock_pre
  366 %! lock1        post    vop_lock_post
  367 
  368 vop_lock1 {
  369         IN struct vnode *vp;
  370         IN int flags;
  371         IN char *file;
  372         IN int line;
  373 };
  374 
  375 
  376 %! unlock       pre     vop_unlock_pre
  377 %! unlock       post    vop_unlock_post
  378 
  379 vop_unlock {
  380         IN struct vnode *vp;
  381         IN int flags;
  382 };
  383 
  384 
  385 %% bmap         vp      L L L
  386 
  387 vop_bmap {
  388         IN struct vnode *vp;
  389         IN daddr_t bn;
  390         OUT struct bufobj **bop;
  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 %% getwritemount vp     = = =
  407 
  408 vop_getwritemount {
  409         IN struct vnode *vp;
  410         OUT struct mount **mpp;
  411 };
  412 
  413 
  414 %% print        vp      - - -
  415 
  416 vop_print {
  417         IN struct vnode *vp;
  418 };
  419 
  420 
  421 %% pathconf     vp      L L L
  422 
  423 vop_pathconf {
  424         IN struct vnode *vp;
  425         IN int name;
  426         OUT register_t *retval;
  427 };
  428 
  429 
  430 %% advlock      vp      U U U
  431 
  432 vop_advlock {
  433         IN struct vnode *vp;
  434         IN void *id;
  435         IN int op;
  436         IN struct flock *fl;
  437         IN int flags;
  438 };
  439 
  440 
  441 %% advlockasync vp      U U U
  442 
  443 vop_advlockasync {
  444         IN struct vnode *vp;
  445         IN void *id;
  446         IN int op;
  447         IN struct flock *fl;
  448         IN int flags;
  449         IN struct task *task;   
  450         INOUT void **cookiep;
  451 };
  452 
  453 
  454 %% advlockpurge vp      E E E
  455 
  456 vop_advlockpurge {
  457         IN struct vnode *vp;
  458 };
  459 
  460 
  461 %% reallocblks  vp      E E E
  462 
  463 vop_reallocblks {
  464         IN struct vnode *vp;
  465         IN struct cluster_save *buflist;
  466 };
  467 
  468 
  469 %% getpages     vp      L L L
  470 
  471 vop_getpages {
  472         IN struct vnode *vp;
  473         IN vm_page_t *m;
  474         IN int count;
  475         IN int reqpage;
  476         IN vm_ooffset_t offset;
  477 };
  478 
  479 
  480 %% putpages     vp      E E E
  481 
  482 vop_putpages {
  483         IN struct vnode *vp;
  484         IN vm_page_t *m;
  485         IN int count;
  486         IN int sync;
  487         IN int *rtvals;
  488         IN vm_ooffset_t offset;
  489 };
  490 
  491 
  492 %% getacl       vp      L L L
  493 
  494 vop_getacl {
  495         IN struct vnode *vp;
  496         IN acl_type_t type;
  497         OUT struct acl *aclp;
  498         IN struct ucred *cred;
  499         IN struct thread *td;
  500 };
  501 
  502 
  503 %% setacl       vp      E E E
  504 
  505 vop_setacl {
  506         IN struct vnode *vp;
  507         IN acl_type_t type;
  508         IN struct acl *aclp;
  509         IN struct ucred *cred;
  510         IN struct thread *td;
  511 };
  512 
  513 
  514 %% aclcheck     vp      = = =
  515 
  516 vop_aclcheck {
  517         IN struct vnode *vp;
  518         IN acl_type_t type;
  519         IN struct acl *aclp;
  520         IN struct ucred *cred;
  521         IN struct thread *td;
  522 };
  523 
  524 
  525 %% closeextattr vp      L L L
  526 
  527 vop_closeextattr {
  528         IN struct vnode *vp;
  529         IN int commit;
  530         IN struct ucred *cred;
  531         IN struct thread *td;
  532 };
  533 
  534 
  535 %% getextattr   vp      L L L
  536 
  537 vop_getextattr {
  538         IN struct vnode *vp;
  539         IN int attrnamespace;
  540         IN const char *name;
  541         INOUT struct uio *uio;
  542         OUT size_t *size;
  543         IN struct ucred *cred;
  544         IN struct thread *td;
  545 };
  546 
  547 
  548 %% listextattr  vp      L L L
  549 
  550 vop_listextattr {
  551         IN struct vnode *vp;
  552         IN int attrnamespace;
  553         INOUT struct uio *uio;
  554         OUT size_t *size;
  555         IN struct ucred *cred;
  556         IN struct thread *td;
  557 };
  558 
  559 
  560 %% openextattr  vp      L L L
  561 
  562 vop_openextattr {
  563         IN struct vnode *vp;
  564         IN struct ucred *cred;
  565         IN struct thread *td;
  566 };
  567 
  568 
  569 %% deleteextattr        vp      E E E
  570 %! deleteextattr        post    vop_deleteextattr_post
  571 
  572 vop_deleteextattr {
  573         IN struct vnode *vp;
  574         IN int attrnamespace;
  575         IN const char *name;
  576         IN struct ucred *cred;
  577         IN struct thread *td;
  578 };
  579 
  580 
  581 %% setextattr   vp      E E E
  582 %! setextattr   post    vop_setextattr_post
  583 
  584 vop_setextattr {
  585         IN struct vnode *vp;
  586         IN int attrnamespace;
  587         IN const char *name;
  588         INOUT struct uio *uio;
  589         IN struct ucred *cred;
  590         IN struct thread *td;
  591 };
  592 
  593 
  594 %% setlabel     vp      E E E
  595 
  596 vop_setlabel {
  597         IN struct vnode *vp;
  598         IN struct label *label;
  599         IN struct ucred *cred;
  600         IN struct thread *td;
  601 };
  602 
  603 
  604 %% vptofh       vp      = = =
  605 
  606 vop_vptofh {
  607         IN struct vnode *vp;
  608         IN struct fid *fhp;
  609 };
  610 
  611 
  612 %% vptocnp              vp      L L L
  613 %% vptocnp              vpp     - U -
  614 
  615 vop_vptocnp {
  616         IN struct vnode *vp;
  617         OUT struct vnode **vpp;
  618         IN struct ucred *cred;
  619         INOUT char *buf;
  620         INOUT int *buflen;
  621 };
  622 
  623 
  624 %% allocate     vp      E E E
  625 
  626 vop_allocate {
  627         IN struct vnode *vp;
  628         INOUT off_t *offset;
  629         INOUT off_t *len;
  630 };
  631 
  632 %% advise       vp      U U U
  633 
  634 vop_advise {
  635         IN struct vnode *vp;
  636         IN off_t start;
  637         IN off_t end;
  638         IN int advice;
  639 };
  640 
  641 %% unp_bind     vp      E E E
  642 
  643 vop_unp_bind {
  644         IN struct vnode *vp;
  645         IN struct socket *socket;
  646 };
  647 
  648 %% unp_connect  vp      L L L
  649 
  650 vop_unp_connect {
  651         IN struct vnode *vp;
  652         OUT struct socket **socket;
  653 };
  654 
  655 %% unp_detach   vp      = = =
  656 
  657 vop_unp_detach {
  658         IN struct vnode *vp;
  659 };
  660 
  661 %% is_text      vp      L L L
  662 
  663 vop_is_text {
  664         IN struct vnode *vp;
  665 };
  666 
  667 %% set_text     vp      E E E
  668 
  669 vop_set_text {
  670         IN struct vnode *vp;
  671 };
  672 
  673 %% vop_unset_text       vp      E E E
  674 
  675 vop_unset_text {
  676         IN struct vnode *vp;
  677 };
  678 
  679 %% get_writecount       vp      L L L
  680 
  681 vop_get_writecount {
  682         IN struct vnode *vp;
  683         OUT int *writecount;
  684 };
  685 
  686 %% add_writecount       vp      E E E
  687 
  688 vop_add_writecount {
  689         IN struct vnode *vp;
  690         IN int inc;
  691 };
  692 
  693 # The VOPs below are spares at the end of the table to allow new VOPs to be
  694 # added in stable branches without breaking the KBI.  New VOPs in HEAD should
  695 # be added above these spares.  When merging a new VOP to a stable branch,
  696 # the new VOP should replace one of the spares.
  697 
  698 vop_spare1 {
  699         IN struct vnode *vp;
  700 };
  701 
  702 vop_spare2 {
  703         IN struct vnode *vp;
  704 };
  705 
  706 vop_spare3 {
  707         IN struct vnode *vp;
  708 };
  709 
  710 vop_spare4 {
  711         IN struct vnode *vp;
  712 };
  713 
  714 vop_spare5 {
  715         IN struct vnode *vp;
  716 };

Cache object: 8f728957f15a063f24a7a030550cb497


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