ovl: change order of setup in ovl_fill_super()
authorMiklos Szeredi <mszeredi@redhat.com>
Fri, 10 Nov 2017 08:39:15 +0000 (09:39 +0100)
committerMiklos Szeredi <mszeredi@redhat.com>
Fri, 10 Nov 2017 08:39:15 +0000 (09:39 +0100)
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>
fs/overlayfs/super.c

index 5a5b41c542fb0a510b4c8d9e7aaf78b16ed8c6ae..c695ea569a99cf3fd64a194af057c0ac6ce1b0c7 100644 (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);
+               err = ovl_get_upper(ufs, &upperpath);
                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);
+               err = ovl_get_workpath(ufs, &upperpath, &workpath);
                if (err)
                        goto out_err;
 
-               sb->s_time_gran = ufs->upper_mnt->mnt_sb->s_time_gran;
-
                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;