#include <sys/param.h> #include <sys/types.h> #include <sys/vnode.h> #include <sys/fs/ufs_inode.h>
struct inode {
/* Filesystem independent view of this inode. */
struct inode *i_forw; /* hash chain, forward */
struct inode *i_back; /* hash chain, back */
struct inode *i_freef; /* free chain, forward */
struct inode *i_freeb; /* free chain, back */
struct vnode *i_vp; /* ptr to vnode */
struct idata *i_data; /* pointer to the pool data */
/* Filesystem dependent view of this inode. */
union i_secure *i_secp; /* extra memory for security data */
struct vnode i_vnode; /* vnode for this inode */
struct vnode *i_devvp; /* vnode for block I/O */
ushort_t i_flag; /* inode flags (see below) */
dev_t i_dev; /* device where inode resides */
ino_t i_number; /* i number, 1-to-1 with device address */
off_t i_diroff; /* offset in dir, where we found last
entry */
struct fs *i_fs; /* file sys associated with this inode */
struct dquot *i_dquot; /* quota structure controlling this file */
short i_owner; /* proc index of process locking inode */
short i_count; /* number of inode locks for i_owner */
daddr_t i_nextr; /* next byte read offset (read-ahead) */
ulong i_vcode; /* version code attribute */
long i_mapcnt; /* mappings to file pages */
int *i_map; /* block list for the corresponding file */
int i_opencnt; /* count of opens for this inode */
lid_t i_dirofflid; /* last proc changing i_diroff w/o write
access */
clock_t i_stamp; /* time when inode was modified but not
copied to the buffer cache */
struct icommon i_ic;
};
struct icommon {
o_mode_t ic_smode; /* 0: mode and type of file */
short ic_nlink; /* 2: number of links to file */
o_uid_t ic_suid; /* 4: owner's user id */
o_gid_t ic_sgid; /* 6: owner's group id */
quad ic_size; /* 8: number of bytes in file */
#ifdef _KERNEL
struct timeval ic_atime;/* 16: time last accessed */
struct timeval ic_mtime;/* 24: time last modified */
nstruct timeval ic_ctime;/* 32: last time inode changed */
#else
time_t ic_atime; /* 16: time last accessed */
long ic_atspare;
time_t ic_mtime; /* 24: time last modified */
long ic_mtspare;
time_t ic_ctime; /* 32: last time inode changed */
long ic_ctspare;
#endif
daddr_t ic_db[NDADDR]; /* 40: disk block addresses */
daddr_t ic_ib[NIADDR]; /* 88: indirect blocks */
long ic_flags; /* 100: status, currently unused */
long ic_blocks; /* 104: blocks actually held */
long ic_gen; /* 108: generation number */
mode_t ic_mode; /* 112: EFT version of mode*/
uid_t ic_uid; /* 116: EFT version of uid */
gid_t ic_gid; /* 120: EFT version of gid */
ulong ic_eftflag; /* 124: indicate EFT version*/
};