xref: /original-bsd/sys/ufs/ffs/dinode.h (revision 76571ef5)
1 /*	dinode.h	4.9	81/11/14	*/
2 
3 /*
4  * The I node is the focus of all file activity in UNIX.
5  * There is a unique inode allocated for each active file,
6  * each current directory, each mounted-on file, text file, and the root.
7  * An inode is 'named' by its dev/inumber pair. (iget/iget.c)
8  * Data, from mode on, is read in from permanent inode on volume.
9  */
10 #define	NADDR	13
11 
12 struct inode {
13 	char	i_flag;
14 	char	i_count;	/* reference count */
15 	dev_t	i_dev;		/* device where inode resides */
16 	ino_t	i_number;	/* i number, 1-to-1 with device address */
17 /* begin read from disk */
18 	u_short	i_mode;
19 	short	i_nlink;	/* directory entries */
20 	short	i_uid;		/* owner */
21 	short	i_gid;		/* group of owner */
22 	off_t	i_size;		/* size of file */
23 	union {
24 		struct i_f {
25 			daddr_t	if_addr[NADDR];	/* if normal file/directory */
26 			daddr_t	if_lastr;	/* last read (read-ahead) */
27 		} i_f;
28 		struct i_d {
29 			daddr_t	id_rdev;	/* i_addr[0] */
30 		} i_d;
31 		struct i_s {
32 			struct	socket *is_socket;
33 		} i_s;
34 #define	i_addr		i_f.if_addr
35 #define	i_lastr		i_f.if_lastr
36 #define	i_rdev		i_d.id_rdev
37 #define	i_socket	i_s.is_socket
38 	} i_un;
39 /* end read from disk */
40 	short	i_XXXXXX;	/* ### */
41 /* SHOULD USE POINTERS, NOT INDICES, FOR HAS CHAIN */
42 	short	i_hlink;	/* link in hash chain (iget/iput/ifind) */
43 };
44 
45 #ifdef KERNEL
46 struct	inode *inode, *inodeNINODE;
47 int	ninode;
48 
49 struct	inode *rootdir;		/* pointer to inode of root directory */
50 
51 struct	inode *ialloc();
52 struct	inode *ifind();
53 struct	inode *iget();
54 struct	inode *owner();
55 struct	inode *maknode();
56 struct	inode *namei();
57 #endif
58 
59 /* flags */
60 #define	ILOCK	01		/* inode is locked */
61 #define	IUPD	02		/* file has been modified */
62 #define	IACC	04		/* inode access time to be updated */
63 #define	IMOUNT	010		/* inode is mounted on */
64 #define	IWANT	020		/* some process waiting on lock */
65 #define	ITEXT	040		/* inode is pure text prototype */
66 #define	ICHG	0100		/* inode has been changed */
67 
68 /* modes */
69 #define	IFMT	0170000		/* type of file */
70 #define		IFCHR		0020000		/* character special */
71 #define		IFDIR		0040000		/* directory */
72 #define		IFBLK		0060000		/* block special */
73 #define		IFREG		0100000		/* regular */
74 #define		IFSYMREG	0110000		/* regular symbolic link */
75 #define		IFSYMDIR	0130000		/* directory symbolic link */
76 #define		IFPORTAL	0140000		/* portal */
77 #define	ISUID	04000		/* set user id on execution */
78 #define	ISGID	02000		/* set group id on execution */
79 #define	ISVTX	01000		/* save swapped text even after use */
80 #define	IREAD	0400		/* read, write, execute permissions */
81 #define	IWRITE	0200
82 #define	IEXEC	0100
83