struct m_inode {
unsigned short i_mode; //Read/Write/Exe flag
unsigned short i_uid; //User ID
unsigned long i_size; //File size
unsigned long i_mtime; //Last modified date/time
unsigned char i_gid; //Group ID
unsigned char i_nlinks; //Link number
unsigned short i_zone[9]; //Logical block number
/* these are in memory also */
struct task_struct * i_wait; //Waiting Process
unsigned long i_atime; //Last access date/time
unsigned long i_ctime; //Inode Created time
unsigned short i_dev; //Dev number
unsigned short i_num; //Inode number
unsigned short i_count; //Reference number
unsigned char i_lock; //Lock flag
unsigned char i_dirt; //Dirty flag
unsigned char i_pipe; //Pipe used
unsigned char i_mount; //Mount flag on FS
unsigned char i_seek; //Seek used
unsigned char i_update; //Inode update flag
};
struct d_inode {
unsigned short i_mode;
unsigned short i_uid;
unsigned long i_size;
unsigned long i_time;
unsigned char i_gid;
unsigned char i_nlinks;
unsigned short i_zone[9];
};
sizeof(struct d_inode) = 2 + 2 + 4 + 4 + 1 +1 + 18 = 32
i_num
如果该值为0, 表示空闲, 没被使用
Liunx文件系统每个Logical zone指的大小为1024 (1K). PC机每个扇区(Sector)大小是512Byte.
i_zone[9]文件所占用的逻辑块
i_zone[0] ----i_zone[6]
直接块号, 因此如果i_zone[7]为空, 则文件最大为7*1024=7K
i_zone[7]一级索引
如果i_zone[8]为空, 则文件最大为512 * 1024 + 7K = 519K
i_zone[8]二级索引
文件最大为512 * 512 *1024 + 519K = 256M