From c6fe62549313555ed56b83bb8338383d78e768cb Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Fri, 10 Nov 2017 09:39:15 +0100 Subject: [PATCH] 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 --- fs/overlayfs/super.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 5a5b41c542fb..c695ea569a99 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -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;