ovl: change order of setup in ovl_fill_super()

Move ovl_get_upper() immediately after ovl_get_upperpath(),
ovl_get_workdir() immediately after ovl_get_workdir() and
ovl_get_lower_layers() immediately after ovl_get_lowerstack().

Also move prepare_creds() up to where other allocations are happening.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
Miklos Szeredi 2017-11-10 09:39:15 +01:00
parent a9075cdb46
commit c6fe625493

View File

@ -1151,6 +1151,10 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
if (!ufs)
goto out;
ufs->creator_cred = cred = prepare_creds();
if (!cred)
goto out_err;
ufs->config.redirect_dir = ovl_redirect_dir_def;
ufs->config.index = ovl_index_def;
err = ovl_parse_opt((char *) data, &ufs->config);
@ -1176,27 +1180,25 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
if (err)
goto out_err;
err = ovl_get_workpath(ufs, &upperpath, &workpath);
if (err)
goto out_err;
sb->s_stack_depth = upperpath.mnt->mnt_sb->s_stack_depth;
}
err = ovl_get_lowerstack(sb, ufs, &stack, &numlower);
if (err)
goto out_err;
if (ufs->config.upperdir) {
err = ovl_get_upper(ufs, &upperpath);
if (err)
goto out_err;
sb->s_time_gran = ufs->upper_mnt->mnt_sb->s_time_gran;
err = ovl_get_workpath(ufs, &upperpath, &workpath);
if (err)
goto out_err;
err = ovl_get_workdir(sb, ufs, &workpath);
if (err)
goto out_err;
sb->s_stack_depth = ufs->upper_mnt->mnt_sb->s_stack_depth;
sb->s_time_gran = ufs->upper_mnt->mnt_sb->s_time_gran;
}
err = ovl_get_lowerstack(sb, ufs, &stack, &numlower);
if (err)
goto out_err;
err = ovl_get_lower_layers(ufs, stack, numlower);
if (err)
@ -1228,11 +1230,6 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
if (!ufs->indexdir)
ufs->config.index = false;
err = -ENOMEM;
ufs->creator_cred = cred = prepare_creds();
if (!cred)
goto out_err;
/* Never override disk quota limits or use reserved space */
cap_lower(cred->cap_effective, CAP_SYS_RESOURCE);
@ -1242,6 +1239,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
sb->s_fs_info = ufs;
sb->s_flags |= MS_POSIXACL | MS_NOREMOTELOCK;
err = -ENOMEM;
root_dentry = d_make_root(ovl_new_inode(sb, S_IFDIR, 0));
if (!root_dentry)
goto out_err;