1*7452Skre /* inode.h 4.13 82/07/16 */ 258Sbill 36565Smckusic /* inode.h 2.1 3/25/82 */ 46565Smckusic 558Sbill /* 64814Swnj * The I node is the focus of all file activity in UNIX. 74814Swnj * There is a unique inode allocated for each active file, 84814Swnj * each current directory, each mounted-on file, text file, and the root. 94814Swnj * An inode is 'named' by its dev/inumber pair. (iget/iget.c) 106565Smckusic * Data in icommon is read in from permanent inode on volume. 1158Sbill */ 1258Sbill 136565Smckusic #define NDADDR 8 /* direct addresses in inode */ 146565Smckusic #define NIADDR 2 /* indirect addresses in inode */ 156565Smckusic 164814Swnj struct inode { 177333Skre struct inode *i_chain[2]; /* must be first */ 1858Sbill char i_flag; 19*7452Skre u_short i_count; /* reference count */ 2058Sbill dev_t i_dev; /* device where inode resides */ 2158Sbill ino_t i_number; /* i number, 1-to-1 with device address */ 226565Smckusic struct fs *i_fs; /* file sys associated with this inode */ 23*7452Skre struct dquot *i_dquot; /* quota structure controlling this file */ 2458Sbill union { 256565Smckusic daddr_t if_lastr; /* last read (read-ahead) */ 266565Smckusic struct socket *is_socket; 277333Skre struct { 287333Skre struct inode *if_freef; /* free list forward */ 297333Skre struct inode **if_freeb; /* free list back */ 307333Skre } i_fr; 3158Sbill } i_un; 326565Smckusic struct icommon 336565Smckusic { 346565Smckusic u_short ic_mode; /* 0: mode and type of file */ 356565Smckusic short ic_nlink; /* 2: number of links to file */ 366565Smckusic short ic_uid; /* 4: owner's user id */ 376565Smckusic short ic_gid; /* 6: owner's group id */ 386565Smckusic off_t ic_size; /* 8: number of bytes in file */ 396565Smckusic daddr_t ic_db[NDADDR]; /* 12: disk block addresses */ 406565Smckusic daddr_t ic_ib[NIADDR]; /* 44: indirect blocks */ 416565Smckusic time_t ic_atime; /* 52: time last accessed */ 426565Smckusic time_t ic_mtime; /* 56: time last modified */ 436565Smckusic time_t ic_ctime; /* 60: time created */ 446565Smckusic } i_ic; 4558Sbill }; 4658Sbill 476565Smckusic struct dinode { 486565Smckusic union { 496565Smckusic struct icommon di_icom; 506565Smckusic char di_size[64]; 516565Smckusic } di_un; 526565Smckusic }; 536565Smckusic 546565Smckusic #define i_mode i_ic.ic_mode 556565Smckusic #define i_nlink i_ic.ic_nlink 566565Smckusic #define i_uid i_ic.ic_uid 576565Smckusic #define i_gid i_ic.ic_gid 586565Smckusic #define i_size i_ic.ic_size 596565Smckusic #define i_db i_ic.ic_db 606565Smckusic #define i_ib i_ic.ic_ib 616565Smckusic #define i_atime i_ic.ic_atime 626565Smckusic #define i_mtime i_ic.ic_mtime 636565Smckusic #define i_ctime i_ic.ic_ctime 646565Smckusic #define i_rdev i_ic.ic_db[0] 656565Smckusic #define i_lastr i_un.if_lastr 666565Smckusic #define i_socket is_socket 677333Skre #define i_forw i_chain[0] 687333Skre #define i_back i_chain[1] 697333Skre #define i_freef i_un.i_fr.if_freef 707333Skre #define i_freeb i_un.i_fr.if_freeb 716565Smckusic 726565Smckusic #define di_ic di_un.di_icom 736565Smckusic #define di_mode di_ic.ic_mode 746565Smckusic #define di_nlink di_ic.ic_nlink 756565Smckusic #define di_uid di_ic.ic_uid 766565Smckusic #define di_gid di_ic.ic_gid 776565Smckusic #define di_size di_ic.ic_size 786565Smckusic #define di_db di_ic.ic_db 796565Smckusic #define di_ib di_ic.ic_ib 806565Smckusic #define di_atime di_ic.ic_atime 816565Smckusic #define di_mtime di_ic.ic_mtime 826565Smckusic #define di_ctime di_ic.ic_ctime 836565Smckusic #define di_rdev di_ic.ic_db[0] 846565Smckusic 8558Sbill #ifdef KERNEL 866565Smckusic extern struct inode *inode; /* The inode table itself */ 876565Smckusic extern struct inode *inodeNINODE; /* The end of the inode table */ 886565Smckusic extern int ninode; /* number of slots in the table */ 8958Sbill 906565Smckusic struct inode *rootdir; /* pointer to inode of root directory */ 9158Sbill 9258Sbill struct inode *ialloc(); 9358Sbill struct inode *ifind(); 9458Sbill struct inode *iget(); 9558Sbill struct inode *owner(); 9658Sbill struct inode *maknode(); 9758Sbill struct inode *namei(); 9858Sbill #endif 9958Sbill 10058Sbill /* flags */ 10158Sbill #define ILOCK 01 /* inode is locked */ 10258Sbill #define IUPD 02 /* file has been modified */ 10358Sbill #define IACC 04 /* inode access time to be updated */ 10458Sbill #define IMOUNT 010 /* inode is mounted on */ 10558Sbill #define IWANT 020 /* some process waiting on lock */ 10658Sbill #define ITEXT 040 /* inode is pure text prototype */ 10758Sbill #define ICHG 0100 /* inode has been changed */ 10858Sbill 10958Sbill /* modes */ 1106565Smckusic #define IFMT 0170000 /* type of file */ 1116565Smckusic #define IFCHR 0020000 /* character special */ 1126565Smckusic #define IFDIR 0040000 /* directory */ 1136565Smckusic #define IFBLK 0060000 /* block special */ 1146565Smckusic #define IFREG 0100000 /* regular */ 1156565Smckusic #define IFLNK 0120000 /* symbolic link */ 1166565Smckusic #define IFPORTAL 0140000 /* portal */ 1176565Smckusic #define ISUID 04000 /* set user id on execution */ 1186565Smckusic #define ISGID 02000 /* set group id on execution */ 1196565Smckusic #define ISVTX 01000 /* save swapped text even after use */ 1206565Smckusic #define IREAD 0400 /* read, write, execute permissions */ 1216565Smckusic #define IWRITE 0200 1226565Smckusic #define IEXEC 0100 123