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

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:  *
1.1.1.2 ! root       33:  *     from: @(#)inode.h       7.17 (Berkeley) 5/8/91
        !            34:  *     inode.h,v 1.7.2.1 1993/07/31 12:10:44 cgd Exp
1.1       root       35:  */
                     36: 
1.1.1.2 ! root       37: #ifndef _UFS_INODE_H_
        !            38: #define _UFS_INODE_H_
        !            39: 
1.1       root       40: #ifdef KERNEL
                     41: #include "../ufs/dinode.h"
                     42: #else
                     43: #include <ufs/dinode.h>
                     44: #endif
                     45: 
                     46: /*
                     47:  * The inode is used to describe each active (or recently active)
                     48:  * file in the UFS filesystem. It is composed of two types of
                     49:  * information. The first part is the information that is needed
                     50:  * only while the file is active (such as the identity of the file
                     51:  * and linkage to speed its lookup). The second part is the 
                     52:  * permannent meta-data associated with the file which is read
                     53:  * in from the permanent dinode from long term storage when the
                     54:  * file becomes active, and is put back when the file is no longer
                     55:  * being used.
                     56:  */
                     57: struct inode {
                     58:        struct  inode *i_chain[2]; /* hash chain, MUST be first */
                     59:        struct  vnode *i_vnode; /* vnode associated with this inode */
                     60:        struct  vnode *i_devvp; /* vnode for block I/O */
                     61:        u_long  i_flag;         /* see below */
                     62:        dev_t   i_dev;          /* device where inode resides */
                     63:        ino_t   i_number;       /* the identity of the inode */
                     64:        struct  fs *i_fs;       /* filesystem associated with this inode */
                     65:        struct  dquot *i_dquot[MAXQUOTAS]; /* pointer to dquot structures */
                     66:        struct  lockf *i_lockf; /* head of byte-level lock list */
                     67:        long    i_diroff;       /* offset in dir, where we found last entry */
                     68:        off_t   i_endoff;       /* end of useful stuff in directory */
                     69:        long    i_spare0;
                     70:        long    i_spare1;
                     71:        struct  dinode i_din;   /* the on-disk dinode */
                     72: };
                     73: 
                     74: #define        i_mode          i_din.di_mode
                     75: #define        i_nlink         i_din.di_nlink
                     76: #define        i_uid           i_din.di_uid
                     77: #define        i_gid           i_din.di_gid
                     78: #if BYTE_ORDER == LITTLE_ENDIAN || defined(tahoe) /* ugh! -- must be fixed */
                     79: #define        i_size          i_din.di_qsize.val[0]
                     80: #else /* BYTE_ORDER == BIG_ENDIAN */
                     81: #define        i_size          i_din.di_qsize.val[1]
                     82: #endif
                     83: #define        i_db            i_din.di_db
                     84: #define        i_ib            i_din.di_ib
                     85: #define        i_atime         i_din.di_atime
                     86: #define        i_mtime         i_din.di_mtime
                     87: #define        i_ctime         i_din.di_ctime
                     88: #define i_blocks       i_din.di_blocks
1.1.1.2 ! root       89: #define        i_rdev          i_din.di_rdev
1.1       root       90: #define i_flags                i_din.di_flags
                     91: #define i_gen          i_din.di_gen
                     92: #define        i_forw          i_chain[0]
                     93: #define        i_back          i_chain[1]
1.1.1.2 ! root       94: #define        FASTLINK(ip)    (DFASTLINK((ip)->i_din))
        !            95: #define        i_fsize         i_din.di_fsize
        !            96: #define        i_symlink       i_din.di_symlink
        !            97: #define        i_di_spare      i_din.di_spare
1.1       root       98: 
                     99: /* flags */
                    100: #define        ILOCKED         0x0001          /* inode is locked */
                    101: #define        IWANT           0x0002          /* some process waiting on lock */
                    102: #define        IRENAME         0x0004          /* inode is being renamed */
                    103: #define        IUPD            0x0010          /* file has been modified */
                    104: #define        IACC            0x0020          /* inode access time to be updated */
                    105: #define        ICHG            0x0040          /* inode has been changed */
                    106: #define        IMOD            0x0080          /* inode has been modified */
                    107: #define        ISHLOCK         0x0100          /* file has shared lock */
                    108: #define        IEXLOCK         0x0200          /* file has exclusive lock */
                    109: #define        ILWAIT          0x0400          /* someone waiting on file lock */
                    110: 
                    111: #ifdef KERNEL
                    112: /*
                    113:  * Convert between inode pointers and vnode pointers
                    114:  */
                    115: #define VTOI(vp)       ((struct inode *)(vp)->v_data)
                    116: #define ITOV(ip)       ((ip)->i_vnode)
                    117: 
                    118: /*
                    119:  * Convert between vnode types and inode formats
                    120:  */
                    121: extern enum vtype      iftovt_tab[];
                    122: extern int             vttoif_tab[];
                    123: #define IFTOVT(mode)   (iftovt_tab[((mode) & IFMT) >> 12])
                    124: #define VTTOIF(indx)   (vttoif_tab[(int)(indx)])
                    125: 
                    126: #define MAKEIMODE(indx, mode)  (int)(VTTOIF(indx) | (mode))
                    127: 
                    128: u_long nextgennumber;          /* next generation number to assign */
                    129: 
                    130: extern ino_t   dirpref();
                    131: 
                    132: /*
                    133:  * Lock and unlock inodes.
                    134:  */
                    135: #ifdef notdef
                    136: #define        ILOCK(ip) { \
                    137:        while ((ip)->i_flag & ILOCKED) { \
                    138:                (ip)->i_flag |= IWANT; \
1.1.1.2 ! root      139:                (void) tsleep((caddr_t)(ip), PINOD, "ILOCK", 0); \
1.1       root      140:        } \
                    141:        (ip)->i_flag |= ILOCKED; \
                    142: }
                    143: 
                    144: #define        IUNLOCK(ip) { \
                    145:        (ip)->i_flag &= ~ILOCKED; \
                    146:        if ((ip)->i_flag&IWANT) { \
                    147:                (ip)->i_flag &= ~IWANT; \
                    148:                wakeup((caddr_t)(ip)); \
                    149:        } \
                    150: }
                    151: #else
                    152: #define ILOCK(ip)      ilock(ip)
                    153: #define IUNLOCK(ip)    iunlock(ip)
                    154: #endif
                    155: 
                    156: #define        IUPDAT(ip, t1, t2, waitfor) { \
                    157:        if (ip->i_flag&(IUPD|IACC|ICHG|IMOD)) \
                    158:                (void) iupdat(ip, t1, t2, waitfor); \
                    159: }
                    160: 
                    161: #define        ITIMES(ip, t1, t2) { \
                    162:        if ((ip)->i_flag&(IUPD|IACC|ICHG)) { \
                    163:                (ip)->i_flag |= IMOD; \
                    164:                if ((ip)->i_flag&IACC) \
                    165:                        (ip)->i_atime = (t1)->tv_sec; \
                    166:                if ((ip)->i_flag&IUPD) \
                    167:                        (ip)->i_mtime = (t2)->tv_sec; \
                    168:                if ((ip)->i_flag&ICHG) \
                    169:                        (ip)->i_ctime = time.tv_sec; \
                    170:                (ip)->i_flag &= ~(IACC|IUPD|ICHG); \
                    171:        } \
                    172: }
                    173: 
                    174: /*
                    175:  * This overlays the fid sturcture (see mount.h)
                    176:  */
                    177: struct ufid {
                    178:        u_short ufid_len;       /* length of structure */
                    179:        u_short ufid_pad;       /* force long alignment */
                    180:        ino_t   ufid_ino;       /* file number (ino) */
                    181:        long    ufid_gen;       /* generation number */
                    182: };
                    183: 
                    184: /*
                    185:  * Prototypes for UFS vnode operations
                    186:  */
                    187: int ufs_lookup __P((struct vnode *vp, struct nameidata *ndp, struct proc *p));
                    188: int ufs_create __P((struct nameidata *ndp, struct vattr *vap, struct proc *p));
                    189: int ufs_mknod __P((struct nameidata *ndp, struct vattr *vap, struct ucred *cred,
                    190:        struct proc *p));
                    191: int ufs_open __P((struct vnode *vp, int mode, struct ucred *cred,
                    192:        struct proc *p));
                    193: int ufs_close __P((struct vnode *vp, int fflag, struct ucred *cred,
                    194:        struct proc *p));
                    195: int ufs_access __P((struct vnode *vp, int mode, struct ucred *cred,
                    196:        struct proc *p));
                    197: int ufs_getattr __P((struct vnode *vp, struct vattr *vap, struct ucred *cred,
                    198:        struct proc *p));
                    199: int ufs_setattr __P((struct vnode *vp, struct vattr *vap, struct ucred *cred,
                    200:        struct proc *p));
                    201: int ufs_read __P((struct vnode *vp, struct uio *uio, int ioflag,
                    202:        struct ucred *cred));
                    203: int ufs_write __P((struct vnode *vp, struct uio *uio, int ioflag,
                    204:        struct ucred *cred));
                    205: int ufs_ioctl __P((struct vnode *vp, int command, caddr_t data, int fflag,
                    206:        struct ucred *cred, struct proc *p));
                    207: int ufs_select __P((struct vnode *vp, int which, int fflags, struct ucred *cred,
                    208:        struct proc *p));
                    209: int ufs_mmap __P((struct vnode *vp, int fflags, struct ucred *cred,
                    210:        struct proc *p));
                    211: int ufs_fsync __P((struct vnode *vp, int fflags, struct ucred *cred,
                    212:        int waitfor, struct proc *p));
                    213: int ufs_seek __P((struct vnode *vp, off_t oldoff, off_t newoff,
                    214:        struct ucred *cred));
                    215: int ufs_remove __P((struct nameidata *ndp, struct proc *p));
                    216: int ufs_link __P((struct vnode *vp, struct nameidata *ndp, struct proc *p));
                    217: int ufs_rename __P((struct nameidata *fndp, struct nameidata *tdnp,
                    218:        struct proc *p));
                    219: int ufs_mkdir __P((struct nameidata *ndp, struct vattr *vap, struct proc *p));
                    220: int ufs_rmdir __P((struct nameidata *ndp, struct proc *p));
                    221: int ufs_symlink __P((struct nameidata *ndp, struct vattr *vap, char *target,
                    222:        struct proc *p));
                    223: int ufs_readdir __P((struct vnode *vp, struct uio *uio, struct ucred *cred,
                    224:        int *eofflagp));
                    225: int ufs_readlink __P((struct vnode *vp, struct uio *uio, struct ucred *cred));
                    226: int ufs_abortop __P((struct nameidata *ndp));
                    227: int ufs_inactive __P((struct vnode *vp, struct proc *p));
                    228: int ufs_reclaim __P((struct vnode *vp));
                    229: int ufs_lock __P((struct vnode *vp));
                    230: int ufs_unlock __P((struct vnode *vp));
                    231: int ufs_bmap __P((struct vnode *vp, daddr_t bn, struct vnode **vpp,
                    232:        daddr_t *bnp));
                    233: int ufs_strategy __P((struct buf *bp));
1.1.1.2 ! root      234: void ufs_print __P((struct vnode *vp));
1.1       root      235: int ufs_islocked __P((struct vnode *vp));
                    236: int ufs_advlock __P((struct vnode *vp, caddr_t id, int op, struct flock *fl,
                    237:        int flags));
                    238: #endif /* KERNEL */
1.1.1.2 ! root      239: 
        !           240: #endif /* !_UFS_INODE_H_ */

unix.superglobalmegacorp.com

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