虚拟文件系统--register_filesystem

本文深入探讨Linux内核中文件系统的注册过程,以`register_filesystem`为例,阐述如何将文件系统类型加入单向链表,并通过`kern_mount`和`get_sb`函数实现文件系统的安装和挂载。详细解析了`file_system_type`结构体以及`find_filesystem`函数的工作原理。
摘要由CSDN通过智能技术生成

每个注册的文件系统都是用一个类型为file_system_type的对象来表示,file_system_type如下所示:

struct file_system_type {
	const char *name;
	int fs_flags;
	int (*get_sb) (struct file_system_type *, int,
		       const char *, void *, struct vfsmount *);
	void (*kill_sb) (struct super_block *);
	struct module *owner;
	struct file_system_type * next;
	struct list_head fs_supers;
	struct lock_class_key s_lock_key;
	struct lock_class_key s_umount_key;
};

所有文件系统类型的对象都插入到一个单向链表中。static struct file_system_type *file_systems;定义了一个全局的变量file_systems指向链表头,结构体中的next指向链表的下一个元素。

注册文件系统是用register_filesystem,以block_dev.c为例:

static struct file_system_type bd_type = {
	.name		= "bdev",
	.get_sb		= bd_get_sb,
	.kill_sb	= kill_anon_super,
};

void __init bdev_cache_init(void)
{
	int err;
	bdev_cachep = kmem_cache_create("bdev_cache", sizeof(struct bdev_inode),
			0, (SLAB_HWCACHE_ALIGN|SLAB_R
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值