VFS数据结构之(其它结构)

1. 与文件系统相关的数据结构

1.1 文件系统类型

1.1.1 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;
};
  • next
    所有文件系统类型对象都插入到一个单向链表中。由变量 file_systems 指向链表的第一个元素,next 字段指向链表的下一个元素。
  • fs_supers
    fs_supers 字段表示给定类型的已安装文件系统对应的超级块链表的头。链表的相邻元素存放在超级块对象的 s_instances 字段。
  • get_sb
    get_sb字段指向依赖于文件系统类型的函数,该函数分配一个新的超级块对象并初始化它,如果需要可以读取磁盘。

1.1.2 文件系统类型注册

文件系统的源代码要么包含在内核映像中,要么作为一个模块被动态加载。VFS必须对代码目前已在内核中的所有文件系统的类型进行跟踪。这就是通过进行文件系统类型注册来实现的。调用 register_filesystem() 函数来注册编译时指定的每个文件系统;该函数把 file_system_type 对象插入到链表中。相关代码示例:

static struct file_system_type ext2_fs_type = {
   
	.owner		= THIS_MODULE,
	.name		= "ext2",
	.get_sb		= ext2_get_sb,
	.kill_sb	= kill_block_super,
	.fs_flags	= FS_REQUIRES_DEV,
};

static int __init init_ext2_fs(void)
		
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值