📄 vfs
字号:
any problems, send mails to sindybear@163.com
相关文件
/fs/inode.c
/fs/buffer.c
/fs/super.c
*****************************super_block的一些有用的数据结构****************************
LIST_HEAD(super_blocks); /fs/super.c
在linux系统中,所有的文件系统的super_block结构都联接成一个双向链表,他们的头指针就是super_blocks
也就是说,遍历这个结构就可以得到所有文件系统的信息。
所有的文件系统的super_block都是在mount的时候链如这个队列的,顺序如下
sys_mount-->do_mount-->do_add_mount-->do_kern_mount-->get_sb_bdev-->insert_super
****************************************************************************************
**********************super_block处理函数集*********************************************
在文件系统中,每一个super_block的函数处理集中都有下列的函数
static struct super_operations bfs_sops = {
read_inode: bfs_read_inode,
write_inode: bfs_write_inode,
delete_inode: bfs_delete_inode,
put_super: bfs_put_super,
write_super: bfs_write_super,
statfs: bfs_statfs,
};
其中,write_inode的处理过程需要好好考察一番,实际上的顺序是这样的
kupdate--->sync_old_buffers--->sync_unlocked_inodes--->sync_list--->__sync_one--->write_inode--->inode->i_sb->s_op->write_inode(inode, sync);
真的是辛苦的不得了。
首先,系统每隔一段时间就会调用kupdate将dirty的buffer_head刷新到磁盘上,
kupdate会调用sync_old_buffers来将所有的dirty的buffer_head刷新到磁盘上
sync_old_buffers则会首先调用sync_unlocked_inodes将一些inode刷新到磁盘上
……
经过一些步骤之后,就会调用各个文件系统的inode->write_inode来进行相应的处理
*********************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -