1. 程式人生 > >SimpleFs檔案系統初步三(Mount過程分析)

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