NTFS文件系統(tǒng)掛載
看這個掛載函數(shù)就知道,和FAT32套路是一樣的仪媒,要看ntfs_fill_super
姜钳。
static struct dentry *ntfs_mount(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data)
{
return mount_bdev(fs_type, flags, dev_name, data, ntfs_fill_super);
}
ntfs_fill_super
老套路,struct super_block *sb
是VFS層的數(shù)據(jù)結(jié)構(gòu)领迈,其成員s_fs_info
是給每個具體的文件系統(tǒng)用的彻磁,我理解它就是一個指向具體文件系統(tǒng)的自定義超級塊的指針,NTFS的自定義超級塊的結(jié)構(gòu)體就是ntfs_volume
惦费。
sb->s_fs_info = kmalloc(sizeof(ntfs_volume), GFP_NOFS);
vol
就是ntfs_volume
的實例指針兵迅,這里把它成員sb
指向了VFS超級塊sb
,super_block
和ntfs_volume
就形成了一種親密關系薪贫,互相很容易找到對方恍箭。
*vol = (ntfs_volume) {
.sb = sb,
///...
};
這里在加載boot sector,也就是把分區(qū)的0號扇區(qū)讀到內(nèi)存里來瞧省。read_ntfs_boot_sector
里面和FAT32一樣扯夭,也是用sb_bread(sb, 0)
讀取分區(qū)的0號扇區(qū),然后用parse_ntfs_boot_sector
來解析它鞍匾。
bh = read_ntfs_boot_sector(sb, silent)
在進一步機械boot sector之前交洗,我需要先說一下NTFS的設計。