📄 super.c.txt
字号:
any problems, send mails to sindybear@163.com
相关文件
**********************日志系统的建立**********************************************
相关文件
/fs/jbd/journal.c
(1)
struct super_block * ext3_read_super (struct super_block * sb, void * data,int silent)
if(…) { //按照参数,进行处理
ext3_load_journal //装载日志
} else {
ext3_create_journal(sb, es, journal_inum) //这个函数就是日志系统的入口。
}
(2)
static int ext3_load_journal(struct super_block * sb, struct ext3_super_block * es)
/*
* 从超级块中将日志信息读出来
*/
if (journal_inum) { //如果日志存在inode结构中
if (!(journal = ext3_get_journal(sb, journal_inum))) //从inode中读出来
return -EINVAL;
} else { //如果存在线性设备中
if (!(journal = ext3_get_dev_journal(sb, journal_dev))) //从设备种读出来
return -EINVAL;
}
journal_load(journal); //装载日志信息。
这个函数是日志系统的核心,他负责从磁盘上将日志系统的超级块读出来,初始化整个日志系统。
并且启动整个日志系统。这个函数就是日志系统的盘古 :-)。
static int ext3_create_journal(struct super_block * sb,struct ext3_super_block * es,int journal_inum)
if (!(journal = ext3_get_journal(sb, journal_inum))) //得到磁盘上的日志。
return -EINVAL;
if (journal_create(journal)) //初始化这个日志,并将信息刷新到磁盘上,并启动日志功能
return -EIO; //如果出错,返回错误
…… //更新ext3文件系统的超级块
ext3_commit_super(sb, es, 1); //刷新ext3文件系统的超级块到磁盘上
static journal_t *ext3_get_journal(struct super_block *sb, int journal_inum)
journal_inode = iget(sb, journal_inum); //首先得到日志对应的inode
if (!journal_inode->i_nlink) //如果inode又连接,出错
return NULL;
…… //进行合法性检查
journal = journal_init_inode(journal_inode); //使用这个inode初始化日志,读出日志的超级块等
return journal; //返回这个新生成的日志
***********************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -