Linux文件系统之VFS(五)
文件系统类型(file_system_type
)定义于 include/linux/fs.h
。
struct file_system_type
用于描述具体文件系统的类型,struct vfsmount
用于描述一个文件系统的安装实例。
Linux
所支持的文件系统,都会有且仅有一个file_system_type
结构(比如,Ext2
对应于ext2_fs_type
,Ext3
对应于ext3_fs_type
),而不管它有零个或多个实例安装到系统中。每当一个文件系统被安装时,就会有一个vfsmount
结构被创建,它代表该文件系统的一个安装实例,也代表了该文件系统的一个安装点。
不同类型的文件系统通过next
字段形成一个链表,同一种文件系统的超级块通过s_instances
字段链接到一起,并挂入fs_supers
链表中。所有的vfsmount
通过mnt_list
字段形成一个链表。
struct file_system_type {
const char *name;
int fs_flags;
#define FS_REQUIRES_DEV 1
#define FS_BINARY_MOUNTDATA 2
#define FS_HAS_SUBTYPE 4
#define FS_USERNS_MOUNT 8
/* Can be mounted by userns root */
#define FS_USERNS_DEV_MOUNT 16
/* A userns mount does not imply MNT_NODEV */
#define FS_USERNS_VISIBLE 32
/* FS must already be visible */
#define FS_RENAME_DOES_D_MOVE 32768
/* FS will handle d_move() during rename() internally. */
struct dentry *(*mount) (struct file_system_type *, int,
const char *, void *);
void (*kill_sb) (struct super_block *);
struct module *owner;
struct file_system_type * next;
struct hlist_head fs_supers;
struct lock_class_key s_lock_key;
struct lock_class_key s_umount_key;
struct lock_class_key s_vfs_rename_key;
struct lock_class_key s_writers_key[SB_FREEZE_LEVELS];
struct lock_class_key i_lock_key;
struct lock_class_key i_mutex_key;
struct lock_class_key i_mutex_dir_key;
};
挂载点(vfsmount
)定义于 include/linux/mount.h
。
struct vfsmount {
struct dentry *mnt_root; /* root of the mounted tree */
struct super_block *mnt_sb; /* pointer to superblock */
int mnt_flags;
};