📄 super.c.txt
字号:
any problems, send mails to sindybear@163.com
相关文件
/fs/namespace.c
********************全局变量************************
LIST_HEAD(super_blocks); //系统中所有的super_block都要连接到这个机构后面
spinlock_t sb_lock = SPIN_LOCK_UNLOCKED; //该结构的保护锁
*****************************************************
************************超级快的读写(主要用于文件系统的mount)********************
(1)static struct super_block *get_sb_bdev(struct file_system_type *fs_type,
int flags, char *dev_name, void * data)
if (path_init(dev_name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd))
error = path_walk(dev_name, &nd); //首先得到安装点的nameidata结构
inode = nd.dentry->d_inode; //得到安装点的inode结构
if (!S_ISBLK(inode->i_mode)) //如果是连接文件,返回错误。
goto out;
error = blkdev_get(bdev, mode, 0, BDEV_FS); //打开这个设备文件
s = alloc_super(); //分配一个sb结构
list_for_each(p, &super_blocks) { //循环查找所有的super_block,看是否已经存在了这个sb
struct super_block *old = sb_entry(p);
if (old->s_dev != dev)
continue;
if (!grab_super(old))
goto restart;
up(&lockfs_sem);
destroy_super(s); //如果系统中确实存在这样一个super_block,则销毁原来分配的
blkdev_put(bdev, BDEV_FS);
path_release(&nd); //返回原来旧的super_block
return old;
}
s->s_dev = dev;
s->s_bdev = bdev;
s->s_flags = flags;
insert_super(s, fs_type);//如果没找到,就初始化这个新的super_block,插入到super_blocks队列中
if (!fs_type->read_super(s, data, flags & MS_VERBOSE ? 1 : 0))
goto Einval; //调用真正的文件系统的read_super函数进一步初始化super_block
*********************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -