EXT4檔案系統學習(12)VFS之檔案系統物件file_system_type
Linux支援各種不同的檔案系統,但是上層應用只需使用open(),read(),write()等系統呼叫就可以對磁碟檔案進行操作,而不需關心具體檔案系統的細節問題。為此提出了虛擬檔案系統VFS,作為中間層遮蔽了底層不同檔案系統之間的差異,向上提供統一的介面,虛擬檔案系統根據不同的檔案系統構造出超級塊,inode和direntry等,這些結構在VFS中是一致的。
檔案系統物件
每一個檔案系統驅動程式都有一個檔案系統物件,定義如下:
include/linux/fs.h
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;
};
呼叫register_filesystem註冊時檔案系統物件,所以的檔案系統物件通過struct file_system_type * next指標連結成連結串列,全部結構體變數static struct file_system_type *file_systems指向連結串列的頭部。
register_filesystem在作用是把檔案系統物件加入到連結串列中且防止重複。
ext4的file_system_type結構體成員賦值如下:
static struct file_system_type ext4_fs_type = {
.owner = THIS_MODULE,
.name = "ext4",
.mount = ext4_mount,
.kill_sb = kill_block_super,
.fs_flags = FS_REQUIRES_DEV,
};
MODULE_ALIAS_FS("ext4");
ext4檔案系統註冊:
fs/ext4/super.c
module_init(ext4_init_fs)
register_as_ext3();開了巨集CONFIG_EXT4_USE_FOR_EXT23會相容ext3和ext2
register_as_ext2();
err = register_filesystem(&ext4_fs_type);
下一篇介紹VFS的超級塊。
相關文章
- EXT4檔案系統學習(15)VFS之VFS 檔案/目錄物件物件
- EXT4檔案系統學習(14)VFS之VFS inode
- EXT4檔案系統學習(13)VFS之VFS超級塊super_blockBloC
- EXT4檔案系統學習(10)VFS之磁碟結構Group和superblockBloC
- EXT4檔案系統學習(9)VFS之磁碟結構inode和direntry
- EXT4檔案系統學習(11)VFS之記憶體結構sb和inode記憶體
- 檔案系統(六):一文看懂linux ext4檔案系統工作原理Linux
- 恢復ext4檔案系統被誤刪的檔案
- 簡單瞭解EXT4檔案系統
- Linux系統篇-檔案系統&虛擬檔案系統Linux
- 檔案和檔案系統
- 深入理解 ext4 等 Linux 檔案系統Linux
- 12_Linux檔案系統概念Linux
- ros學習檔案系統介紹ROS
- 檔案系統
- 檔案系統(五):exFAT 檔案系統原理詳解
- Linux系統檔案系統及檔案基礎篇Linux
- 如何系統學習C 語言(下)之 檔案篇
- Linux深入探索12-檔案系統Linux
- 分散式檔案系統(HDFS)與 linux系統檔案系統 對比分散式Linux
- 檔案系統(十):一文看懂 UBI 檔案系統
- 【檔案系統】嵌入式檔案系統Fatfs簡介
- 『學了就忘』Linux檔案系統管理 — 57、Linux檔案系統介紹Linux
- 理解Linux檔案系統之 inodeLinux
- 分散式檔案系統之 FastDFS分散式AST
- Linux系統檔案學習內容多嗎?linux系統命令Linux
- debugfs檔案系統
- Linux檔案系統Linux
- FUSE檔案系統
- 檔案系統安全
- [Linux]檔案系統Linux
- Hadoop學習(一)——HDFS分散式檔案系統Hadoop分散式
- 記憶體檔案系統的再學習記憶體
- 檔案系統(四):FAT32檔案系統實現原理
- 檔案系統(十一):Linux Squashfs只讀檔案系統介紹Linux
- 檔案描述符和檔案系統
- 在FreeBSD上mount Ext4檔案系統的行動硬碟硬碟
- NTFS、exFAT、FAT32、Ext4檔案系統的區別