1 /* Inode table. This table holds inodes that are currently in use. In some
2 * cases they have been opened by an open() or creat() system call, in other
3 * cases the file system itself needs the inode for one reason or another,
4 * such as to search a directory for a path name.
5 * The first part of the struct holds fields that are present on the
6 * disk; the second part holds fields not present on the disk.
7 * The disk inode part is also declared in "type.h" as 'd1_inode' for V1
8 * file systems and 'd2_inode' for V2 file systems.
14 mode_t i_mode
; /* file type, protection, etc. */
15 nlink_t i_nlinks
; /* how many links to this file */
16 uid_t i_uid
; /* user id of the file's owner */
17 gid_t i_gid
; /* group number */
18 off_t i_size
; /* current file size in bytes */
19 time_t i_atime
; /* time of last access (V2 only) */
20 time_t i_mtime
; /* when was file data last changed */
21 time_t i_ctime
; /* when was inode itself changed (V2 only)*/
22 zone_t i_zone
[V2_NR_TZONES
]; /* zone numbers for direct, ind, and dbl ind */
24 /* The following items are not present on the disk. */
25 dev_t i_dev
; /* which device is the inode on */
26 ino_t i_num
; /* inode number on its (minor) device */
27 int i_count
; /* # times inode used; 0 means slot is free */
28 int i_ndzones
; /* # direct zones (Vx_NR_DZONES) */
29 int i_nindirs
; /* # indirect zones per indirect block */
30 struct super_block
*i_sp
; /* pointer to super block for inode's device */
31 char i_dirt
; /* CLEAN or DIRTY */
32 char i_pipe
; /* set to I_PIPE if pipe */
34 char i_mount
; /* this bit is set if file mounted on */
35 short i_vmnt_ind
; /* index of the vmnt mounted on */
37 char i_seek
; /* set on LSEEK, cleared on READ/WRITE */
38 char i_update
; /* the ATIME, CTIME, and MTIME bits are here */
40 LIST_ENTRY(inode
) i_hash
; /* hash list */
41 TAILQ_ENTRY(inode
) i_unused
; /* free and unused list */
45 /* list of unused/free inodes */
46 EXTERN
TAILQ_HEAD(unused_inodes_t
, inode
) unused_inodes
;
49 EXTERN
LIST_HEAD(inodelist
, inode
) hash_inodes
[INODE_HASH_SIZE
];
51 EXTERN
unsigned int inode_cache_hit
;
52 EXTERN
unsigned int inode_cache_miss
;
54 #define NIL_INODE (struct inode *) 0 /* indicates absence of inode slot */
56 /* Field values. Note that CLEAN and DIRTY are defined in "const.h" */
57 #define NO_PIPE 0 /* i_pipe is NO_PIPE if inode is not a pipe */
58 #define I_PIPE 1 /* i_pipe is I_PIPE if inode is a pipe */
59 #define NO_MOUNT 0 /* i_mount is NO_MOUNT if file not mounted on*/
60 #define I_MOUNT 1 /* i_mount is I_MOUNT if file mounted on */
61 #define NO_SEEK 0 /* i_seek = NO_SEEK if last op was not SEEK */
62 #define ISEEK 1 /* i_seek = ISEEK if last op was SEEK */