|
|
#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*/ };