Annotation of Net2/ufs/inode.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1982, 1989 The Regents of the University of California.
        !             3:  * 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:  * 3. All advertising materials mentioning features or use of this software
        !            14:  *    must display the following acknowledgement:
        !            15:  *     This product includes software developed by the University of
        !            16:  *     California, Berkeley and its contributors.
        !            17:  * 4. Neither the name of the University nor the names of its contributors
        !            18:  *    may be used to endorse or promote products derived from this software
        !            19:  *    without specific prior written permission.
        !            20:  *
        !            21:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            31:  * SUCH DAMAGE.
        !            32:  *
        !            33:  *     @(#)inode.h     7.17 (Berkeley) 5/8/91
        !            34:  */
        !            35: 
        !            36: #ifdef KERNEL
        !            37: #include "../ufs/dinode.h"
        !            38: #else
        !            39: #include <ufs/dinode.h>
        !            40: #endif
        !            41: 
        !            42: /*
        !            43:  * The inode is used to describe each active (or recently active)
        !            44:  * file in the UFS filesystem. It is composed of two types of
        !            45:  * information. The first part is the information that is needed
        !            46:  * only while the file is active (such as the identity of the file
        !            47:  * and linkage to speed its lookup). The second part is the 
        !            48:  * permannent meta-data associated with the file which is read
        !            49:  * in from the permanent dinode from long term storage when the
        !            50:  * file becomes active, and is put back when the file is no longer
        !            51:  * being used.
        !            52:  */
        !            53: struct inode {
        !            54:        struct  inode *i_chain[2]; /* hash chain, MUST be first */
        !            55:        struct  vnode *i_vnode; /* vnode associated with this inode */
        !            56:        struct  vnode *i_devvp; /* vnode for block I/O */
        !            57:        u_long  i_flag;         /* see below */
        !            58:        dev_t   i_dev;          /* device where inode resides */
        !            59:        ino_t   i_number;       /* the identity of the inode */
        !            60:        struct  fs *i_fs;       /* filesystem associated with this inode */
        !            61:        struct  dquot *i_dquot[MAXQUOTAS]; /* pointer to dquot structures */
        !            62:        struct  lockf *i_lockf; /* head of byte-level lock list */
        !            63:        long    i_diroff;       /* offset in dir, where we found last entry */
        !            64:        off_t   i_endoff;       /* end of useful stuff in directory */
        !            65:        long    i_spare0;
        !            66:        long    i_spare1;
        !            67:        struct  dinode i_din;   /* the on-disk dinode */
        !            68: };
        !            69: 
        !            70: #define        i_mode          i_din.di_mode
        !            71: #define        i_nlink         i_din.di_nlink
        !            72: #define        i_uid           i_din.di_uid
        !            73: #define        i_gid           i_din.di_gid
        !            74: #if BYTE_ORDER == LITTLE_ENDIAN || defined(tahoe) /* ugh! -- must be fixed */
        !            75: #define        i_size          i_din.di_qsize.val[0]
        !            76: #else /* BYTE_ORDER == BIG_ENDIAN */
        !            77: #define        i_size          i_din.di_qsize.val[1]
        !            78: #endif
        !            79: #define        i_db            i_din.di_db
        !            80: #define        i_ib            i_din.di_ib
        !            81: #define        i_atime         i_din.di_atime
        !            82: #define        i_mtime         i_din.di_mtime
        !            83: #define        i_ctime         i_din.di_ctime
        !            84: #define i_blocks       i_din.di_blocks
        !            85: #define        i_rdev          i_din.di_db[0]
        !            86: #define i_flags                i_din.di_flags
        !            87: #define i_gen          i_din.di_gen
        !            88: #define        i_forw          i_chain[0]
        !            89: #define        i_back          i_chain[1]
        !            90: 
        !            91: /* flags */
        !            92: #define        ILOCKED         0x0001          /* inode is locked */
        !            93: #define        IWANT           0x0002          /* some process waiting on lock */
        !            94: #define        IRENAME         0x0004          /* inode is being renamed */
        !            95: #define        IUPD            0x0010          /* file has been modified */
        !            96: #define        IACC            0x0020          /* inode access time to be updated */
        !            97: #define        ICHG            0x0040          /* inode has been changed */
        !            98: #define        IMOD            0x0080          /* inode has been modified */
        !            99: #define        ISHLOCK         0x0100          /* file has shared lock */
        !           100: #define        IEXLOCK         0x0200          /* file has exclusive lock */
        !           101: #define        ILWAIT          0x0400          /* someone waiting on file lock */
        !           102: 
        !           103: #ifdef KERNEL
        !           104: /*
        !           105:  * Convert between inode pointers and vnode pointers
        !           106:  */
        !           107: #define VTOI(vp)       ((struct inode *)(vp)->v_data)
        !           108: #define ITOV(ip)       ((ip)->i_vnode)
        !           109: 
        !           110: /*
        !           111:  * Convert between vnode types and inode formats
        !           112:  */
        !           113: extern enum vtype      iftovt_tab[];
        !           114: extern int             vttoif_tab[];
        !           115: #define IFTOVT(mode)   (iftovt_tab[((mode) & IFMT) >> 12])
        !           116: #define VTTOIF(indx)   (vttoif_tab[(int)(indx)])
        !           117: 
        !           118: #define MAKEIMODE(indx, mode)  (int)(VTTOIF(indx) | (mode))
        !           119: 
        !           120: u_long nextgennumber;          /* next generation number to assign */
        !           121: 
        !           122: extern ino_t   dirpref();
        !           123: 
        !           124: /*
        !           125:  * Lock and unlock inodes.
        !           126:  */
        !           127: #ifdef notdef
        !           128: #define        ILOCK(ip) { \
        !           129:        while ((ip)->i_flag & ILOCKED) { \
        !           130:                (ip)->i_flag |= IWANT; \
        !           131:                (void) sleep((caddr_t)(ip), PINOD); \
        !           132:        } \
        !           133:        (ip)->i_flag |= ILOCKED; \
        !           134: }
        !           135: 
        !           136: #define        IUNLOCK(ip) { \
        !           137:        (ip)->i_flag &= ~ILOCKED; \
        !           138:        if ((ip)->i_flag&IWANT) { \
        !           139:                (ip)->i_flag &= ~IWANT; \
        !           140:                wakeup((caddr_t)(ip)); \
        !           141:        } \
        !           142: }
        !           143: #else
        !           144: #define ILOCK(ip)      ilock(ip)
        !           145: #define IUNLOCK(ip)    iunlock(ip)
        !           146: #endif
        !           147: 
        !           148: #define        IUPDAT(ip, t1, t2, waitfor) { \
        !           149:        if (ip->i_flag&(IUPD|IACC|ICHG|IMOD)) \
        !           150:                (void) iupdat(ip, t1, t2, waitfor); \
        !           151: }
        !           152: 
        !           153: #define        ITIMES(ip, t1, t2) { \
        !           154:        if ((ip)->i_flag&(IUPD|IACC|ICHG)) { \
        !           155:                (ip)->i_flag |= IMOD; \
        !           156:                if ((ip)->i_flag&IACC) \
        !           157:                        (ip)->i_atime = (t1)->tv_sec; \
        !           158:                if ((ip)->i_flag&IUPD) \
        !           159:                        (ip)->i_mtime = (t2)->tv_sec; \
        !           160:                if ((ip)->i_flag&ICHG) \
        !           161:                        (ip)->i_ctime = time.tv_sec; \
        !           162:                (ip)->i_flag &= ~(IACC|IUPD|ICHG); \
        !           163:        } \
        !           164: }
        !           165: 
        !           166: /*
        !           167:  * This overlays the fid sturcture (see mount.h)
        !           168:  */
        !           169: struct ufid {
        !           170:        u_short ufid_len;       /* length of structure */
        !           171:        u_short ufid_pad;       /* force long alignment */
        !           172:        ino_t   ufid_ino;       /* file number (ino) */
        !           173:        long    ufid_gen;       /* generation number */
        !           174: };
        !           175: 
        !           176: /*
        !           177:  * Prototypes for UFS vnode operations
        !           178:  */
        !           179: int ufs_lookup __P((struct vnode *vp, struct nameidata *ndp, struct proc *p));
        !           180: int ufs_create __P((struct nameidata *ndp, struct vattr *vap, struct proc *p));
        !           181: int ufs_mknod __P((struct nameidata *ndp, struct vattr *vap, struct ucred *cred,
        !           182:        struct proc *p));
        !           183: int ufs_open __P((struct vnode *vp, int mode, struct ucred *cred,
        !           184:        struct proc *p));
        !           185: int ufs_close __P((struct vnode *vp, int fflag, struct ucred *cred,
        !           186:        struct proc *p));
        !           187: int ufs_access __P((struct vnode *vp, int mode, struct ucred *cred,
        !           188:        struct proc *p));
        !           189: int ufs_getattr __P((struct vnode *vp, struct vattr *vap, struct ucred *cred,
        !           190:        struct proc *p));
        !           191: int ufs_setattr __P((struct vnode *vp, struct vattr *vap, struct ucred *cred,
        !           192:        struct proc *p));
        !           193: int ufs_read __P((struct vnode *vp, struct uio *uio, int ioflag,
        !           194:        struct ucred *cred));
        !           195: int ufs_write __P((struct vnode *vp, struct uio *uio, int ioflag,
        !           196:        struct ucred *cred));
        !           197: int ufs_ioctl __P((struct vnode *vp, int command, caddr_t data, int fflag,
        !           198:        struct ucred *cred, struct proc *p));
        !           199: int ufs_select __P((struct vnode *vp, int which, int fflags, struct ucred *cred,
        !           200:        struct proc *p));
        !           201: int ufs_mmap __P((struct vnode *vp, int fflags, struct ucred *cred,
        !           202:        struct proc *p));
        !           203: int ufs_fsync __P((struct vnode *vp, int fflags, struct ucred *cred,
        !           204:        int waitfor, struct proc *p));
        !           205: int ufs_seek __P((struct vnode *vp, off_t oldoff, off_t newoff,
        !           206:        struct ucred *cred));
        !           207: int ufs_remove __P((struct nameidata *ndp, struct proc *p));
        !           208: int ufs_link __P((struct vnode *vp, struct nameidata *ndp, struct proc *p));
        !           209: int ufs_rename __P((struct nameidata *fndp, struct nameidata *tdnp,
        !           210:        struct proc *p));
        !           211: int ufs_mkdir __P((struct nameidata *ndp, struct vattr *vap, struct proc *p));
        !           212: int ufs_rmdir __P((struct nameidata *ndp, struct proc *p));
        !           213: int ufs_symlink __P((struct nameidata *ndp, struct vattr *vap, char *target,
        !           214:        struct proc *p));
        !           215: int ufs_readdir __P((struct vnode *vp, struct uio *uio, struct ucred *cred,
        !           216:        int *eofflagp));
        !           217: int ufs_readlink __P((struct vnode *vp, struct uio *uio, struct ucred *cred));
        !           218: int ufs_abortop __P((struct nameidata *ndp));
        !           219: int ufs_inactive __P((struct vnode *vp, struct proc *p));
        !           220: int ufs_reclaim __P((struct vnode *vp));
        !           221: int ufs_lock __P((struct vnode *vp));
        !           222: int ufs_unlock __P((struct vnode *vp));
        !           223: int ufs_bmap __P((struct vnode *vp, daddr_t bn, struct vnode **vpp,
        !           224:        daddr_t *bnp));
        !           225: int ufs_strategy __P((struct buf *bp));
        !           226: int ufs_print __P((struct vnode *vp));
        !           227: int ufs_islocked __P((struct vnode *vp));
        !           228: int ufs_advlock __P((struct vnode *vp, caddr_t id, int op, struct flock *fl,
        !           229:        int flags));
        !           230: #endif /* KERNEL */

unix.superglobalmegacorp.com

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