mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
ovl: grab reference to workbasedir early
and related cleanups. Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
f7e3a7d947
commit
95e6d4177c
@ -889,7 +889,7 @@ static int ovl_get_workpath(struct ovl_fs *ufs, struct path *upperpath,
|
||||
pr_warn("overlayfs: workdir is in-use by another mount, accessing files from both mounts will result in undefined behavior.\n");
|
||||
}
|
||||
|
||||
ufs->workbasedir = workpath->dentry;
|
||||
ufs->workbasedir = dget(workpath->dentry);
|
||||
err = 0;
|
||||
out:
|
||||
return err;
|
||||
@ -918,7 +918,7 @@ static int ovl_get_workdir(struct super_block *sb, struct ovl_fs *ufs,
|
||||
struct dentry *temp;
|
||||
int err;
|
||||
|
||||
ufs->workdir = ovl_workdir_create(sb, ufs, workpath->dentry,
|
||||
ufs->workdir = ovl_workdir_create(sb, ufs, ufs->workbasedir,
|
||||
OVL_WORKDIR_NAME, false);
|
||||
if (!ufs->workdir)
|
||||
return 0;
|
||||
@ -971,7 +971,7 @@ static int ovl_get_workdir(struct super_block *sb, struct ovl_fs *ufs,
|
||||
|
||||
static int ovl_get_indexdir(struct super_block *sb, struct ovl_fs *ufs,
|
||||
struct ovl_entry *oe,
|
||||
struct path *upperpath, struct path *workpath)
|
||||
struct path *upperpath)
|
||||
{
|
||||
int err;
|
||||
|
||||
@ -985,7 +985,7 @@ static int ovl_get_indexdir(struct super_block *sb, struct ovl_fs *ufs,
|
||||
goto out;
|
||||
}
|
||||
|
||||
ufs->indexdir = ovl_workdir_create(sb, ufs, workpath->dentry,
|
||||
ufs->indexdir = ovl_workdir_create(sb, ufs, ufs->workbasedir,
|
||||
OVL_INDEXDIR_NAME, true);
|
||||
if (ufs->indexdir) {
|
||||
/* Verify upper root is index dir origin */
|
||||
@ -1212,7 +1212,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
|
||||
}
|
||||
|
||||
if (!(ovl_force_readonly(ufs)) && ufs->config.index) {
|
||||
err = ovl_get_indexdir(sb, ufs, oe, &upperpath, &workpath);
|
||||
err = ovl_get_indexdir(sb, ufs, oe, &upperpath);
|
||||
if (err)
|
||||
goto out_put_indexdir;
|
||||
}
|
||||
@ -1243,7 +1243,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
|
||||
for (i = 0; i < numlower; i++)
|
||||
mntput(stack[i].mnt);
|
||||
kfree(stack);
|
||||
mntput(workpath.mnt);
|
||||
path_put(&workpath);
|
||||
|
||||
if (upperpath.dentry) {
|
||||
oe->has_upper = true;
|
||||
@ -1283,7 +1283,8 @@ out_put_lowerpath:
|
||||
kfree(stack);
|
||||
out_unlock_workdentry:
|
||||
if (ufs->workdir_locked)
|
||||
ovl_inuse_unlock(workpath.dentry);
|
||||
ovl_inuse_unlock(ufs->workbasedir);
|
||||
dput(ufs->workbasedir);
|
||||
path_put(&workpath);
|
||||
out_unlock_upperdentry:
|
||||
if (ufs->upperdir_locked)
|
||||
|
Loading…
Reference in New Issue
Block a user