Fixed extern declaration from pointer to array
[minix.git] / servers / mfs / inode.h
blob2a22026e1871a4b7211605d71e26ec1d414f2dc1
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.
10 * Updates:
11 * 2007-01-06: jfdsmit@gmail.com added i_zsearch
14 #include <sys/queue.h>
16 EXTERN struct inode {
17 mode_t i_mode; /* file type, protection, etc. */
18 nlink_t i_nlinks; /* how many links to this file */
19 uid_t i_uid; /* user id of the file's owner */
20 gid_t i_gid; /* group number */
21 off_t i_size; /* current file size in bytes */
22 time_t i_atime; /* time of last access (V2 only) */
23 time_t i_mtime; /* when was file data last changed */
24 time_t i_ctime; /* when was inode itself changed (V2 only)*/
25 zone_t i_zone[V2_NR_TZONES]; /* zone numbers for direct, ind, and dbl ind */
27 /* The following items are not present on the disk. */
28 dev_t i_dev; /* which device is the inode on */
29 ino_t i_num; /* inode number on its (minor) device */
30 int i_count; /* # times inode used; 0 means slot is free */
31 int i_ndzones; /* # direct zones (Vx_NR_DZONES) */
32 int i_nindirs; /* # indirect zones per indirect block */
33 struct super_block *i_sp; /* pointer to super block for inode's device */
34 char i_dirt; /* CLEAN or DIRTY */
35 bit_t i_zsearch; /* where to start search for new zones */
37 char i_mountpoint; /* true if mounted on */
39 char i_seek; /* set on LSEEK, cleared on READ/WRITE */
40 char i_update; /* the ATIME, CTIME, and MTIME bits are here */
42 LIST_ENTRY(inode) i_hash; /* hash list */
43 TAILQ_ENTRY(inode) i_unused; /* free and unused list */
45 } inode[NR_INODES];
47 /* list of unused/free inodes */
48 EXTERN TAILQ_HEAD(unused_inodes_t, inode) unused_inodes;
50 /* inode hashtable */
51 EXTERN LIST_HEAD(inodelist, inode) hash_inodes[INODE_HASH_SIZE];
53 EXTERN unsigned int inode_cache_hit;
54 EXTERN unsigned int inode_cache_miss;
56 #define NIL_INODE (struct inode *) 0 /* indicates absence of inode slot */
58 /* Field values. Note that CLEAN and DIRTY are defined in "const.h" */
59 #define NO_SEEK 0 /* i_seek = NO_SEEK if last op was not SEEK */
60 #define ISEEK 1 /* i_seek = ISEEK if last op was SEEK */