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/bsd/sys/vnode.h

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) 2000-2002 Apple Computer, Inc. All rights reserved.
    3  *
    4  * @APPLE_LICENSE_HEADER_START@
    5  * 
    6  * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
    7  * 
    8  * This file contains Original Code and/or Modifications of Original Code
    9  * as defined in and that are subject to the Apple Public Source License
   10  * Version 2.0 (the 'License'). You may not use this file except in
   11  * compliance with the License. Please obtain a copy of the License at
   12  * http://www.opensource.apple.com/apsl/ and read it before using this
   13  * file.
   14  * 
   15  * The Original Code and all software distributed under the License are
   16  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
   17  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
   18  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
   19  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
   20  * Please see the License for the specific language governing rights and
   21  * limitations under the License.
   22  * 
   23  * @APPLE_LICENSE_HEADER_END@
   24  */
   25 /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
   26 /*
   27  * Copyright (c) 1989, 1993
   28  *      The Regents of the University of California.  All rights reserved.
   29  *
   30  * Redistribution and use in source and binary forms, with or without
   31  * modification, are permitted provided that the following conditions
   32  * are met:
   33  * 1. Redistributions of source code must retain the above copyright
   34  *    notice, this list of conditions and the following disclaimer.
   35  * 2. Redistributions in binary form must reproduce the above copyright
   36  *    notice, this list of conditions and the following disclaimer in the
   37  *    documentation and/or other materials provided with the distribution.
   38  * 3. All advertising materials mentioning features or use of this software
   39  *    must display the following acknowledgement:
   40  *      This product includes software developed by the University of
   41  *      California, Berkeley and its contributors.
   42  * 4. Neither the name of the University nor the names of its contributors
   43  *    may be used to endorse or promote products derived from this software
   44  *    without specific prior written permission.
   45  *
   46  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   47  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   48  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   49  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   50  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   51  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   52  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   53  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   54  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   55  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   56  * SUCH DAMAGE.
   57  *
   58  *      @(#)vnode.h     8.17 (Berkeley) 5/20/95
   59  */
   60  
   61 #ifndef _VNODE_H_
   62 #define _VNODE_H_
   63 
   64 #include <sys/appleapiopts.h>
   65 #include <sys/cdefs.h>
   66 #include <sys/queue.h>
   67 #include <sys/lock.h>
   68 
   69 #include <sys/time.h>
   70 #include <sys/uio.h>
   71 
   72 #include <sys/vm.h>
   73 #ifdef KERNEL
   74 #include <sys/systm.h>
   75 #include <vm/vm_pageout.h>
   76 #endif /* KERNEL */
   77 
   78 #ifdef __APPLE_API_PRIVATE
   79 /*
   80  * The vnode is the focus of all file activity in UNIX.  There is a
   81  * unique vnode allocated for each active file, each current directory,
   82  * each mounted-on file, text file, and the root.
   83  */
   84 
   85 /*
   86  * Vnode types.  VNON means no type.
   87  */
   88 enum vtype      { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VSOCK, VFIFO, VBAD, VSTR,
   89                           VCPLX };
   90 
   91 /*
   92  * Vnode tag types.
   93  * These are for the benefit of external programs only (e.g., pstat)
   94  * and should NEVER be inspected by the kernel.
   95  */
   96 enum vtagtype   {
   97         VT_NON, VT_UFS, VT_NFS, VT_MFS, VT_MSDOSFS, VT_LFS, VT_LOFS, VT_FDESC,
   98         VT_PORTAL, VT_NULL, VT_UMAP, VT_KERNFS, VT_PROCFS, VT_AFS, VT_ISOFS,
   99         VT_UNION, VT_HFS, VT_VOLFS, VT_DEVFS, VT_WEBDAV, VT_UDF, VT_AFP,
  100         VT_CDDA, VT_CIFS,VT_OTHER};
  101 
  102 /*
  103  * Each underlying filesystem allocates its own private area and hangs
  104  * it from v_data.  If non-null, this area is freed in getnewvnode().
  105  */
  106 LIST_HEAD(buflists, buf);
  107 
  108 #define MAX_CLUSTERS 4  /* maximum number of vfs clusters per vnode */
  109 
  110 struct v_cluster {
  111         unsigned int    start_pg;
  112         unsigned int    last_pg;
  113 };
  114 
  115 struct v_padded_clusters {
  116         long    v_pad;
  117         struct v_cluster        v_c[MAX_CLUSTERS];
  118 };
  119 
  120 /*
  121  * Reading or writing any of these items requires holding the appropriate lock.
  122  * v_freelist is locked by the global vnode_free_list simple lock.
  123  * v_mntvnodes is locked by the global mntvnodes simple lock.
  124  * v_flag, v_usecount, v_holdcount and v_writecount are
  125  * locked by the v_interlock simple lock.
  126  */
  127 struct vnode {
  128         u_long  v_flag;                         /* vnode flags (see below) */
  129         long    v_usecount;                     /* reference count of users */
  130         long    v_holdcnt;                      /* page & buffer references */
  131         daddr_t v_lastr;                        /* last read (read-ahead) */
  132         u_long  v_id;                           /* capability identifier */
  133         struct  mount *v_mount;                 /* ptr to vfs we are in */
  134         int     (**v_op)(void *);               /* vnode operations vector */
  135         TAILQ_ENTRY(vnode) v_freelist;          /* vnode freelist */
  136         LIST_ENTRY(vnode) v_mntvnodes;          /* vnodes for mount point */
  137         struct  buflists v_cleanblkhd;          /* clean blocklist head */
  138         struct  buflists v_dirtyblkhd;          /* dirty blocklist head */
  139         long    v_numoutput;                    /* num of writes in progress */
  140         enum    vtype v_type;                   /* vnode type */
  141         union {
  142                 struct mount    *vu_mountedhere;/* ptr to mounted vfs (VDIR) */
  143                 struct socket   *vu_socket;     /* unix ipc (VSOCK) */
  144                 struct specinfo *vu_specinfo;   /* device (VCHR, VBLK) */
  145                 struct fifoinfo *vu_fifoinfo;   /* fifo (VFIFO) */
  146                 char            *vu_name;       /* name (only for VREG) */
  147         } v_un;
  148         struct ubc_info *v_ubcinfo;     /* valid for (VREG) */
  149         struct  nqlease *v_lease;               /* Soft reference to lease */
  150         void   *v_scmap;                        /* pointer to sparse cluster map */
  151         int     v_scdirty;                      /* number of dirty pages in the sparse cluster map */
  152         daddr_t v_ciosiz;                       /* real size of I/O for cluster */
  153         int     v_clen;                         /* length of current cluster */
  154         int     v_ralen;                        /* Read-ahead length */
  155         daddr_t v_maxra;                        /* last readahead block */
  156         union {
  157                 simple_lock_data_t v_ilk;       /* lock on usecount and flag */
  158                 struct v_padded_clusters v_cl;  /* vfs cluster IO */
  159         } v_un1;
  160 #define v_clusters v_un1.v_cl.v_c
  161 #define v_interlock v_un1.v_ilk
  162 
  163         struct  lock__bsd__ *v_vnlock;          /* used for non-locking fs's */
  164         long    v_writecount;                   /* reference count of writers */
  165         enum    vtagtype v_tag;                 /* type of underlying data */
  166         void    *v_data;                        /* private data for fs */
  167 };
  168 #define v_mountedhere   v_un.vu_mountedhere
  169 #define v_socket        v_un.vu_socket
  170 #define v_specinfo      v_un.vu_specinfo
  171 #define v_fifoinfo      v_un.vu_fifoinfo
  172 
  173 // NOTE: Do not use these macros.  They are for vfs internal use only.
  174 #define VNAME(vp)   ((char *)((vp)->v_type == VREG ? (vp)->v_un.vu_name : (vp)->v_scmap))
  175 #define VPARENT(vp) ((struct vnode *)((vp)->v_type == VREG ? (vp)->v_un1.v_cl.v_pad : (vp)->v_scdirty))
  176 
  177 
  178 /*
  179  * Vnode flags.
  180  */
  181 #define VROOT           0x000001        /* root of its file system */
  182 #define VTEXT           0x000002        /* vnode is a pure text prototype */
  183 #define VSYSTEM         0x000004        /* vnode being used by kernel */
  184 #define VISTTY          0x000008        /* vnode represents a tty */
  185 #define VWASMAPPED      0x000010        /* vnode was mapped before */
  186 #define VTERMINATE      0x000020        /* terminating memory object */
  187 #define VTERMWANT       0x000040        /* wating for memory object death */
  188 #define VMOUNT          0x000080        /* mount operation in progress */
  189 #define VXLOCK          0x000100        /* vnode is locked to change underlying type */
  190 #define VXWANT          0x000200        /* process is waiting for vnode */
  191 #define VBWAIT          0x000400        /* waiting for output to complete */
  192 #define VALIASED        0x000800        /* vnode has an alias */
  193 #define VORECLAIM       0x001000        /* vm object is being reclaimed */
  194 #define VNOCACHE_DATA   0x002000        /* don't keep data cached once it's been consumed */
  195 #define VSTANDARD       0x004000        /* vnode obtained from common pool */
  196 #define VAGE            0x008000        /* Insert vnode at head of free list */
  197 #define VRAOFF          0x010000        /* read ahead disabled */
  198 #define VUINIT          0x020000        /* ubc_info being initialized */
  199 #define VUWANT          0x040000        /* process is wating for VUINIT */
  200 #define VUINACTIVE      0x080000        /* UBC vnode is on inactive list */
  201 #define VHASDIRTY       0x100000        /* UBC vnode may have 1 or more */
  202                 /* delayed dirty pages that need to be flushed at the next 'sync' */
  203 #define VSWAP           0x200000        /* vnode is being used as swapfile */
  204 #define VTHROTTLED      0x400000        /* writes or pageouts have been throttled */
  205                 /* wakeup tasks waiting when count falls below threshold */
  206 #define VNOFLUSH        0x800000        /* don't vflush() if SKIPSYSTEM */
  207 #define VDELETED       0x1000000        /* this vnode is being deleted */
  208 #define VFULLFSYNC     0x2000000        /* ask the drive to write the data to the media */
  209 #define VHASBEENPAGED  0x4000000        /* vnode has been recently paged to */
  210 
  211 /*
  212  * Vnode attributes.  A field value of VNOVAL represents a field whose value
  213  * is unavailable (getattr) or which is not to be changed (setattr).
  214  */
  215 struct vattr {
  216         enum vtype      va_type;        /* vnode type (for create) */
  217         u_short         va_mode;        /* files access mode and type */
  218         short           va_nlink;       /* number of references to file */
  219         uid_t           va_uid;         /* owner user id */
  220         gid_t           va_gid;         /* owner group id */
  221         long            va_fsid;        /* file system id (dev for now) */
  222         long            va_fileid;      /* file id */
  223         u_quad_t        va_size;        /* file size in bytes */
  224         long            va_blocksize;   /* blocksize preferred for i/o */
  225         struct timespec va_atime;       /* time of last access */
  226         struct timespec va_mtime;       /* time of last modification */
  227         struct timespec va_ctime;       /* time file changed */
  228         u_long          va_gen;         /* generation number of file */
  229         u_long          va_flags;       /* flags defined for file */
  230         dev_t           va_rdev;        /* device the special file represents */
  231         u_quad_t        va_bytes;       /* bytes of disk space held by file */
  232         u_quad_t        va_filerev;     /* file modification number */
  233         u_int           va_vaflags;     /* operations flags, see below */
  234         long            va_spare;       /* remain quad aligned */
  235 };
  236 
  237 /*
  238  * Flags for va_vaflags.
  239  */
  240 #define VA_UTIMES_NULL  0x01            /* utimes argument was NULL */
  241 #define VA_EXCLUSIVE    0x02            /* exclusive create request */
  242 
  243 /*
  244  * Flags for ioflag.
  245  */
  246 #define IO_UNIT         0x01            /* do I/O as atomic unit */
  247 #define IO_APPEND       0x02            /* append write to end */
  248 #define IO_SYNC         0x04            /* do I/O synchronously */
  249 #define IO_NODELOCKED   0x08            /* underlying node already locked */
  250 #define IO_NDELAY       0x10            /* FNDELAY flag set in file table */
  251 #define IO_NOZEROFILL   0x20            /* F_SETSIZE fcntl uses to prevent zero filling */
  252 #define IO_TAILZEROFILL 0x40            /* zero fills at the tail of write */
  253 #define IO_HEADZEROFILL 0x80            /* zero fills at the head of write */
  254 #define IO_NOZEROVALID  0x100           /* do not zero fill if valid page */
  255 #define IO_NOZERODIRTY  0x200           /* do not zero fill if page is dirty */
  256 
  257 /*
  258  *  Modes.  Some values same as Ixxx entries from inode.h for now.
  259  */
  260 #define VSUID   04000           /* set user id on execution */
  261 #define VSGID   02000           /* set group id on execution */
  262 #define VSVTX   01000           /* save swapped text even after use */
  263 #define VREAD   00400           /* read, write, execute permissions */
  264 #define VWRITE  00200
  265 #define VEXEC   00100
  266 
  267 /*
  268  * Token indicating no attribute value yet assigned.
  269  */
  270 #define VNOVAL  (-1)
  271 
  272 #ifdef KERNEL
  273 /*
  274  * Convert between vnode types and inode formats (since POSIX.1
  275  * defines mode word of stat structure in terms of inode formats).
  276  */
  277 extern enum vtype       iftovt_tab[];
  278 extern int              vttoif_tab[];
  279 #define IFTOVT(mode)    (iftovt_tab[((mode) & S_IFMT) >> 12])
  280 #define VTTOIF(indx)    (vttoif_tab[(int)(indx)])
  281 #define MAKEIMODE(indx, mode)   (int)(VTTOIF(indx) | (mode))
  282 
  283 /*
  284  * Flags to various vnode functions.
  285  */
  286 #define SKIPSYSTEM      0x0001          /* vflush: skip vnodes marked VSYSTEM */
  287 #define FORCECLOSE      0x0002          /* vflush: force file closeure */
  288 #define WRITECLOSE      0x0004          /* vflush: only close writeable files */
  289 #define SKIPSWAP        0x0008          /* vflush: skip vnodes marked VSWAP */
  290 
  291 #define DOCLOSE         0x0008          /* vclean: close active files */
  292 
  293 #define V_SAVE          0x0001          /* vinvalbuf: sync file first */
  294 #define V_SAVEMETA      0x0002          /* vinvalbuf: leave indirect blocks */
  295 
  296 #define REVOKEALL       0x0001          /* vop_revoke: revoke all aliases */
  297 
  298 /* flags for vop_allocate */
  299 #define PREALLOCATE             0x00000001      /* preallocate allocation blocks */
  300 #define ALLOCATECONTIG  0x00000002      /* allocate contigious space */
  301 #define ALLOCATEALL             0x00000004      /* allocate all requested space */
  302                                                                         /* or no space at all */
  303 #define FREEREMAINDER   0x00000008      /* deallocate allocated but */
  304                                                                         /* unfilled blocks */
  305 #define ALLOCATEFROMPEOF        0x00000010      /* allocate from the physical eof */
  306 #define ALLOCATEFROMVOL         0x00000020      /* allocate from the volume offset */
  307 
  308 #if DIAGNOSTIC
  309 #define VATTR_NULL(vap) vattr_null(vap)
  310 #define HOLDRELE(vp)    holdrele(vp)
  311 #define VHOLD(vp)       vhold(vp)
  312 
  313 void    holdrele __P((struct vnode *));
  314 void    vattr_null __P((struct vattr *));
  315 void    vhold __P((struct vnode *));
  316 #else
  317 #define VATTR_NULL(vap) (*(vap) = va_null)      /* initialize a vattr */
  318 #define HOLDRELE(vp)    holdrele(vp)            /* decrease buf or page ref */
  319 extern __inline void holdrele(struct vnode *vp)
  320 {
  321         simple_lock(&vp->v_interlock);
  322         vp->v_holdcnt--;
  323         simple_unlock(&vp->v_interlock);
  324 }
  325 #define VHOLD(vp)       vhold(vp)               /* increase buf or page ref */
  326 extern __inline void vhold(struct vnode *vp)
  327 {
  328         simple_lock(&vp->v_interlock);
  329         if (++vp->v_holdcnt <= 0)
  330                 panic("vhold: v_holdcnt");
  331         simple_unlock(&vp->v_interlock);
  332 }
  333 #endif /* DIAGNOSTIC */
  334 
  335 #define VREF(vp)        vref(vp)
  336 void    vref __P((struct vnode *));
  337 #define NULLVP  ((struct vnode *)NULL)
  338 
  339 /*
  340  * Global vnode data.
  341  */
  342 extern  struct vnode *rootvnode;        /* root (i.e. "/") vnode */
  343 extern  int desiredvnodes;              /* number of vnodes desired */
  344 extern  struct vattr va_null;           /* predefined null vattr structure */
  345 
  346 /*
  347  * Macro/function to check for client cache inconsistency w.r.t. leasing.
  348  */
  349 #define LEASE_READ      0x1             /* Check lease for readers */
  350 #define LEASE_WRITE     0x2             /* Check lease for modifiers */
  351 #endif /* KERNEL */
  352 
  353 /*
  354  * Mods for exensibility.
  355  */
  356 
  357 /*
  358  * Flags for vdesc_flags:
  359  */
  360 #define VDESC_MAX_VPS           16
  361 /* Low order 16 flag bits are reserved for willrele flags for vp arguments. */
  362 #define VDESC_VP0_WILLRELE      0x0001
  363 #define VDESC_VP1_WILLRELE      0x0002
  364 #define VDESC_VP2_WILLRELE      0x0004
  365 #define VDESC_VP3_WILLRELE      0x0008
  366 #define VDESC_NOMAP_VPP         0x0100
  367 #define VDESC_VPP_WILLRELE      0x0200
  368 
  369 /*
  370  * VDESC_NO_OFFSET is used to identify the end of the offset list
  371  * and in places where no such field exists.
  372  */
  373 #define VDESC_NO_OFFSET -1
  374 
  375 /*
  376  * This structure describes the vnode operation taking place.
  377  */
  378 struct vnodeop_desc {
  379         int     vdesc_offset;           /* offset in vector--first for speed */
  380         char    *vdesc_name;            /* a readable name for debugging */
  381         int     vdesc_flags;            /* VDESC_* flags */
  382 
  383         /*
  384          * These ops are used by bypass routines to map and locate arguments.
  385          * Creds and procs are not needed in bypass routines, but sometimes
  386          * they are useful to (for example) transport layers.
  387          * Nameidata is useful because it has a cred in it.
  388          */
  389         int     *vdesc_vp_offsets;      /* list ended by VDESC_NO_OFFSET */
  390         int     vdesc_vpp_offset;       /* return vpp location */
  391         int     vdesc_cred_offset;      /* cred location, if any */
  392         int     vdesc_proc_offset;      /* proc location, if any */
  393         int     vdesc_componentname_offset; /* if any */
  394         /*
  395          * Finally, we've got a list of private data (about each operation)
  396          * for each transport layer.  (Support to manage this list is not
  397          * yet part of BSD.)
  398          */
  399         caddr_t *vdesc_transports;
  400 };
  401 
  402 #endif /* __APPLE_API_PRIVATE */
  403 
  404 #ifdef KERNEL
  405 
  406 #ifdef __APPLE_API_PRIVATE
  407 /*
  408  * A list of all the operation descs.
  409  */
  410 extern struct vnodeop_desc *vnodeop_descs[];
  411 
  412 /*
  413  * Interlock for scanning list of vnodes attached to a mountpoint
  414  */
  415 extern struct slock mntvnode_slock;
  416 
  417 /*
  418  * This macro is very helpful in defining those offsets in the vdesc struct.
  419  *
  420  * This is stolen from X11R4.  I ingored all the fancy stuff for
  421  * Crays, so if you decide to port this to such a serious machine,
  422  * you might want to consult Intrisics.h's XtOffset{,Of,To}.
  423  */
  424 #define VOPARG_OFFSET(p_type,field) \
  425         ((int) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL)))
  426 #define VOPARG_OFFSETOF(s_type,field) \
  427         VOPARG_OFFSET(s_type*,field)
  428 #define VOPARG_OFFSETTO(S_TYPE,S_OFFSET,STRUCT_P) \
  429         ((S_TYPE)(((char*)(STRUCT_P))+(S_OFFSET)))
  430 
  431 
  432 /*
  433  * This structure is used to configure the new vnodeops vector.
  434  */
  435 struct vnodeopv_entry_desc {
  436         struct vnodeop_desc *opve_op;   /* which operation this is */
  437         int (*opve_impl)(void *);               /* code implementing this operation */
  438 };
  439 struct vnodeopv_desc {
  440                         /* ptr to the ptr to the vector where op should go */
  441         int (***opv_desc_vector_p)(void *);
  442         struct vnodeopv_entry_desc *opv_desc_ops;   /* null terminated list */
  443 };
  444 
  445 /*
  446  * A default routine which just returns an error.
  447  */
  448 int vn_default_error __P((void));
  449 
  450 /*
  451  * A generic structure.
  452  * This can be used by bypass routines to identify generic arguments.
  453  */
  454 struct vop_generic_args {
  455         struct vnodeop_desc *a_desc;
  456         /* other random data follows, presumably */
  457 };
  458 
  459 /*
  460  * VOCALL calls an op given an ops vector.  We break it out because BSD's
  461  * vclean changes the ops vector and then wants to call ops with the old
  462  * vector.
  463  */
  464 #define VOCALL(OPSV,OFF,AP) (( *((OPSV)[(OFF)])) (AP))
  465 
  466 /*
  467  * This call works for vnodes in the kernel.
  468  */
  469 #define VCALL(VP,OFF,AP) VOCALL((VP)->v_op,(OFF),(AP))
  470 #define VDESC(OP) (& __CONCAT(OP,_desc))
  471 #define VOFFSET(OP) (VDESC(OP)->vdesc_offset)
  472 
  473 #endif /* __APPLE_API_PRIVATE */
  474 
  475 /*
  476  * Finally, include the default set of vnode operations.
  477  */
  478 #include <sys/vnode_if.h>
  479 
  480 /*
  481  * vnode manipulation functions.
  482  */
  483 struct file;
  484 struct mount;
  485 struct nameidata;
  486 struct ostat;
  487 struct proc;
  488 struct stat;
  489 struct ucred;
  490 struct uio;
  491 struct vattr;
  492 struct vnode;
  493 struct vop_bwrite_args;
  494 
  495 #ifdef __APPLE_API_EVOLVING
  496 int     bdevvp __P((dev_t dev, struct vnode **vpp));
  497 void    cvtstat __P((struct stat *st, struct ostat *ost));
  498 int     getnewvnode __P((enum vtagtype tag,
  499             struct mount *mp, int (**vops)(void *), struct vnode **vpp));
  500 void    insmntque __P((struct vnode *vp, struct mount *mp));
  501 void    vattr_null __P((struct vattr *vap));
  502 int     vcount __P((struct vnode *vp));
  503 int     vflush __P((struct mount *mp, struct vnode *skipvp, int flags));
  504 int     vget __P((struct vnode *vp, int lockflag, struct proc *p));
  505 void    vgone __P((struct vnode *vp));
  506 int     vinvalbuf __P((struct vnode *vp, int save, struct ucred *cred,
  507             struct proc *p, int slpflag, int slptimeo));
  508 void    vprint __P((char *label, struct vnode *vp));
  509 int     vrecycle __P((struct vnode *vp, struct slock *inter_lkp,
  510             struct proc *p));
  511 int     vn_bwrite __P((struct vop_bwrite_args *ap));
  512 int     vn_close __P((struct vnode *vp,
  513             int flags, struct ucred *cred, struct proc *p));
  514 int     vn_lock __P((struct vnode *vp, int flags, struct proc *p));
  515 int     vn_open __P((struct nameidata *ndp, int fmode, int cmode));
  516 #ifndef __APPLE_API_PRIVATE
  517 __private_extern__ int
  518         vn_open_modflags __P((struct nameidata *ndp, int *fmode, int cmode));
  519 #endif /* __APPLE_API_PRIVATE */
  520 int     vn_rdwr __P((enum uio_rw rw, struct vnode *vp, caddr_t base,
  521             int len, off_t offset, enum uio_seg segflg, int ioflg,
  522             struct ucred *cred, int *aresid, struct proc *p));
  523 int     vn_stat __P((struct vnode *vp, struct stat *sb, struct proc *p));
  524 int     vop_noislocked __P((struct vop_islocked_args *));
  525 int     vop_nolock __P((struct vop_lock_args *));
  526 int     vop_nounlock __P((struct vop_unlock_args *));
  527 int     vop_revoke __P((struct vop_revoke_args *));
  528 struct vnode *
  529         checkalias __P((struct vnode *vp, dev_t nvp_rdev, struct mount *mp));
  530 void    vput __P((struct vnode *vp));
  531 void    vrele __P((struct vnode *vp));
  532 int     vaccess __P((mode_t file_mode, uid_t uid, gid_t gid,
  533             mode_t acc_mode, struct ucred *cred));
  534 int     getvnode __P((struct proc *p, int fd, struct file **fpp));
  535 #endif /* __APPLE_API_EVOLVING */
  536 
  537 #endif /* KERNEL */
  538 
  539 #endif /* !_VNODE_H_ */

Cache object: afb9b46c323925cf6101b4a5b8bf1bdd


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