SimpleFs文件系統初步三(Mount過程分析)

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的填充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章