Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 367ea334 authored by Ryusuke Konishi's avatar Ryusuke Konishi
Browse files

nilfs2: split out nilfs_get_root_dentry



This splits the code to allocate root dentry into a separate routine
for convenience in successive changes.

Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
parent dc3d3b81
Loading
Loading
Loading
Loading
+35 −19
Original line number Diff line number Diff line
@@ -750,6 +750,39 @@ int nilfs_check_feature_compatibility(struct super_block *sb,
	return 0;
}

static int nilfs_get_root_dentry(struct super_block *sb,
				 struct nilfs_root *root,
				 struct dentry **root_dentry)
{
	struct inode *inode;
	struct dentry *dentry;
	int ret = 0;

	inode = nilfs_iget(sb, root, NILFS_ROOT_INO);
	if (IS_ERR(inode)) {
		printk(KERN_ERR "NILFS: get root inode failed\n");
		ret = PTR_ERR(inode);
		goto out;
	}
	if (!S_ISDIR(inode->i_mode) || !inode->i_blocks || !inode->i_size) {
		iput(inode);
		printk(KERN_ERR "NILFS: corrupt root inode.\n");
		ret = -EINVAL;
		goto out;
	}

	dentry = d_alloc_root(inode);
	if (!dentry) {
		iput(inode);
		printk(KERN_ERR "NILFS: get root dentry failed\n");
		ret = -ENOMEM;
		goto out;
	}
	*root_dentry = dentry;
 out:
	return ret;
}

/**
 * nilfs_fill_super() - initialize a super block instance
 * @sb: super_block
@@ -766,7 +799,6 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent,
{
	struct nilfs_sb_info *sbi;
	struct nilfs_root *fsroot;
	struct inode *root;
	__u64 cno;
	int err, curr_mnt;

@@ -850,25 +882,9 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent,
			goto failed_checkpoint;
	}

	root = nilfs_iget(sb, fsroot, NILFS_ROOT_INO);
	if (IS_ERR(root)) {
		printk(KERN_ERR "NILFS: get root inode failed\n");
		err = PTR_ERR(root);
		goto failed_segctor;
	}
	if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
		iput(root);
		printk(KERN_ERR "NILFS: corrupt root inode.\n");
		err = -EINVAL;
		goto failed_segctor;
	}
	sb->s_root = d_alloc_root(root);
	if (!sb->s_root) {
		iput(root);
		printk(KERN_ERR "NILFS: get root dentry failed\n");
		err = -ENOMEM;
	err = nilfs_get_root_dentry(sb, fsroot, &sb->s_root);
	if (err)
		goto failed_segctor;
	}

	nilfs_put_root(fsroot);