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

📄 super.c.txt

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