X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/a0eab615b76b09f71f1a714eb885a0eb62841bd4..ad30fb672122d5a4daba6642b8a6075e44df7af5:/usr/src/sys/ufs/ffs/dinode.h diff --git a/usr/src/sys/ufs/ffs/dinode.h b/usr/src/sys/ufs/ffs/dinode.h index db0341f873..a9495b7a1d 100644 --- a/usr/src/sys/ufs/ffs/dinode.h +++ b/usr/src/sys/ufs/ffs/dinode.h @@ -1,66 +1,84 @@ -/* dinode.h 4.5 81/03/09 */ +/* dinode.h 4.11 82/04/19 */ + +/* inode.h 2.1 3/25/82 */ /* - * The I node is the focus of all - * file activity in unix. There is a unique - * inode allocated for each active file, - * each current directory, each mounted-on - * file, text file, and the root. An inode is 'named' - * by its dev/inumber pair. (iget/iget.c) - * Data, from mode on, is read in - * from permanent inode on volume. + * The I node is the focus of all file activity in UNIX. + * There is a unique inode allocated for each active file, + * each current directory, each mounted-on file, text file, and the root. + * An inode is 'named' by its dev/inumber pair. (iget/iget.c) + * Data in icommon is read in from permanent inode on volume. */ -#define NADDR 13 +#define NDADDR 8 /* direct addresses in inode */ +#define NIADDR 2 /* indirect addresses in inode */ -#define NINDEX 6 -struct group -{ - short g_state; - char g_index; - char g_rot; - struct group *g_group; - struct inode *g_inode; - struct file *g_file; - short g_rotmask; - short g_datq; - struct chan *g_chans[NINDEX]; -}; -struct inode -{ +struct inode { char i_flag; char i_count; /* reference count */ dev_t i_dev; /* device where inode resides */ ino_t i_number; /* i number, 1-to-1 with device address */ - unsigned short i_mode; - short i_nlink; /* directory entries */ - short i_uid; /* owner */ - short i_gid; /* group of owner */ - off_t i_size; /* size of file */ + long i_hlink; /* link in hash chain (iget/iput/ifind) */ + struct fs *i_fs; /* file sys associated with this inode */ union { - struct { - daddr_t I_addr[NADDR]; /* if normal file/directory */ - daddr_t I_lastr; /* last read (for read-ahead) */ - } i_f; -#define i_addr i_f.I_addr -#define i_lastr i_f.I_lastr - struct { - daddr_t I_rdev; /* i_addr[0] */ - struct group I_group; /* multiplexor group file */ - } i_d; -#define i_rdev i_d.I_rdev -#define i_group i_d.I_group + daddr_t if_lastr; /* last read (read-ahead) */ + struct socket *is_socket; } i_un; - short i_vfdcnt; /* number of fd's vreading this inode */ - short i_hlink; /* link in hash chain (iget/iput/ifind) */ + struct icommon + { + u_short ic_mode; /* 0: mode and type of file */ + short ic_nlink; /* 2: number of links to file */ + short ic_uid; /* 4: owner's user id */ + short ic_gid; /* 6: owner's group id */ + off_t ic_size; /* 8: number of bytes in file */ + daddr_t ic_db[NDADDR]; /* 12: disk block addresses */ + daddr_t ic_ib[NIADDR]; /* 44: indirect blocks */ + time_t ic_atime; /* 52: time last accessed */ + time_t ic_mtime; /* 56: time last modified */ + time_t ic_ctime; /* 60: time created */ + } i_ic; }; +struct dinode { + union { + struct icommon di_icom; + char di_size[64]; + } di_un; +}; + +#define i_mode i_ic.ic_mode +#define i_nlink i_ic.ic_nlink +#define i_uid i_ic.ic_uid +#define i_gid i_ic.ic_gid +#define i_size i_ic.ic_size +#define i_db i_ic.ic_db +#define i_ib i_ic.ic_ib +#define i_atime i_ic.ic_atime +#define i_mtime i_ic.ic_mtime +#define i_ctime i_ic.ic_ctime +#define i_rdev i_ic.ic_db[0] +#define i_lastr i_un.if_lastr +#define i_socket is_socket + +#define di_ic di_un.di_icom +#define di_mode di_ic.ic_mode +#define di_nlink di_ic.ic_nlink +#define di_uid di_ic.ic_uid +#define di_gid di_ic.ic_gid +#define di_size di_ic.ic_size +#define di_db di_ic.ic_db +#define di_ib di_ic.ic_ib +#define di_atime di_ic.ic_atime +#define di_mtime di_ic.ic_mtime +#define di_ctime di_ic.ic_ctime +#define di_rdev di_ic.ic_db[0] + #ifdef KERNEL -struct inode *inode, *inodeNINODE; -int ninode; +extern struct inode *inode; /* The inode table itself */ +extern struct inode *inodeNINODE; /* The end of the inode table */ +extern int ninode; /* number of slots in the table */ -struct inode *rootdir; /* pointer to inode of root directory */ -struct inode *mpxip; /* mpx virtual inode */ +struct inode *rootdir; /* pointer to inode of root directory */ struct inode *ialloc(); struct inode *ifind(); @@ -78,19 +96,18 @@ struct inode *namei(); #define IWANT 020 /* some process waiting on lock */ #define ITEXT 040 /* inode is pure text prototype */ #define ICHG 0100 /* inode has been changed */ -#define IPIPE 0200 /* inode is a pipe */ /* modes */ -#define IFMT 0170000 /* type of file */ -#define IFDIR 0040000 /* directory */ -#define IFCHR 0020000 /* character special */ -#define IFBLK 0060000 /* block special */ -#define IFREG 0100000 /* regular */ -#define IFMPC 0030000 /* multiplexed char special */ -#define IFMPB 0070000 /* multiplexed block special */ -#define ISUID 04000 /* set user id on execution */ -#define ISGID 02000 /* set group id on execution */ -#define ISVTX 01000 /* save swapped text even after use */ -#define IREAD 0400 /* read, write, execute permissions */ -#define IWRITE 0200 -#define IEXEC 0100 +#define IFMT 0170000 /* type of file */ +#define IFCHR 0020000 /* character special */ +#define IFDIR 0040000 /* directory */ +#define IFBLK 0060000 /* block special */ +#define IFREG 0100000 /* regular */ +#define IFLNK 0120000 /* symbolic link */ +#define IFPORTAL 0140000 /* portal */ +#define ISUID 04000 /* set user id on execution */ +#define ISGID 02000 /* set group id on execution */ +#define ISVTX 01000 /* save swapped text even after use */ +#define IREAD 0400 /* read, write, execute permissions */ +#define IWRITE 0200 +#define IEXEC 0100