内核中的NTFS
类比于FAT32文件系统,来看一下内核中的NTFS文件系统代码。
这部分代码质量可能不会很高!
根据FAT32分析的经验,应该先找到module_init
所在位置。它就在kernel/fs/ntfs/super.c里面,叫init_ntfs_fs
。内容挺长的,核心内容我简化如下。
static int __init init_ntfs_fs(void)
{
xxx_cache = kmem_cache_create(...);
//...
err = register_filesystem(&ntfs_fs_type);
//...
}
- 用kmem_cache_create分配一些缓冲区
一些常用的数据结构,如果临时分配和释放内存,就会很花时间。对于释放的数据结构实例,我们其实可以不释放内存,只是将其置为无效状态即可,等到需要分配一个实例时,直接激活这个实例来用就行了。
每种文件系统可能会有一些自己的数据结构的缓冲区。VFS也有一些缓冲区,例如inode、dentry等数据结构。 - 用register_filesystem注册文件系统
注册的内容如下,与FAT32文件系统一样,ntfs注册了自己的mount函数——ntfs_mount
和kill_sb函数——kill_block_super
。前者是挂载时被调用的,后者是卸载时被调用的。
static struct file_system_type ntfs_fs_type = {
.owner = THIS_MODULE,
.name = "ntfs",
.mount = ntfs_mount,
.kill_sb = kill_block_super,
.fs_flags = FS_REQUIRES_DEV,
};