⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inode.c.txt

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻 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 + -