static int simplefs_init(void)
{
int ret;
sfs_inode_cachep = kmem_cache_create("sfs_inode_cache",
sizeof(struct simplefs_inode),
0,
(SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD),
NULL);
if (!sfs_inode_cachep) {
return -ENOMEM;
}
ret = register_filesystem(&simplefs_fs_type);
if (likely(ret == 0))
printk(KERN_INFO "Sucessfully registered simplefs\n");
else
printk(KERN_ERR "Failed to register simplefs. Error:[%d]", ret);
return ret;
}
上述代碼:
第一步建立了用於vfs的inode cache:
關於inode和dentry的cache可以看下面的blob。
inode和dentry
第二步註冊當前的文件系統:
struct file_system_type simplefs_fs_type = {
.owner = THIS_MODULE,
.name = "simplefs",
.mount = simplefs_mount,
.kill_sb = simplefs_kill_superblock,
.fs_flags = FS_REQUIRES_DEV,
};
當前文件系統的類型是"simplefs",mount指針指向的simplefs_mount會在文件系統掛載的時候被調用,kill_sb指針則會在umount文件系統的時候被調用。
simplefs_mount->mount_bdev
看看mount_bdev的傳入參數:
fs_type:文件系統類型,當前是simplefs
flags:
dev_name:塊設備的名稱:例如:/dev/sda,當前我們是/dev/loop0
data:傳入指針
fill_super:函數指針,當前指向的是simplefs_fill_super,該函數主要完成的是super block的填充。