📄 inode.c.txt
字号:
any problems,send mails to sindybear@163.com
相关文件
/ext2/super.c
//这个函数就是在super.c中定义的超级块中的inode的读操作。
//因为这个函数是由vfs层的get_new_inode调用的,传过来的参数inode就是在那里生成的
//这个函数只用把这个结构中自己的那一部分填充进去就行了
(1)void ext2_read_inode (struct inode * inode)
//首先由ino得到这个inode所在的块组号
block_group = (inode->i_ino - 1) / EXT2_INODES_PER_GROUP(inode->i_sb);
gdp = (struct ext2_group_desc *) bh->b_data; //得到块组描述符
if (!(bh = sb_bread(inode->i_sb, block))) { //计算块,从相应的块中读取inode表
…… //错误处理
}
raw_inode = (struct ext2_inode *) (bh->b_data + offset);//从读出的inode表中相应的offset中
//取出inode
…… //使用读出的raw_inode对inode进行初始化
(2)void ext2_write_inode (struct inode * inode, int wait)
ext2_update_inode (inode, wait); //仅仅调用更新inode的函数
(3)static int ext2_update_inode(struct inode * inode, int do_sync)
//这个函数和ext2_read_inode函数结构类似,但是数据处理的方向正好相反
block_group = (inode->i_ino - 1) / EXT2_INODES_PER_GROUP(inode->i_sb);
gdp = (struct ext2_group_desc *) bh->b_data; //得到块组描述符
if (!(bh = sb_bread(inode->i_sb, block))) { //计算块,从相应的块中读取inode表
…… //错误处理
}
raw_inode = (struct ext2_inode *) (bh->b_data + offset);//从读出的inode表中相应的offset中
//取出inode
…… //使用传进来的vfs的inode对读出来的raw_inode初始化
mark_buffer_dirty(bh); //把这个buffer标志为脏,等待写回磁盘
if (do_sync) { //如果是同步写的话,立刻就写到磁盘上
ll_rw_block (WRITE, 1, &bh);
wait_on_buffer (bh);
if (buffer_req(bh) && !buffer_uptodate(bh)) {
printk ("IO error syncing ext2 inode ["
"%s:%08lx]\n",
bdevname(inode->i_dev), inode->i_ino);
err = -EIO;
}
} //如果不是同步写的话,就等buffer的处理函数来处理
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -