SimpleFs檔案系統初步三(Mount過程分析)
阿新 • • 發佈:2018-12-16
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的填充。