Annotation of XNU/bsd/sys/vnode.h, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.