Skip to content

Commit

Permalink
ovl: set d->is_dir and d->opaque for last path element
Browse files Browse the repository at this point in the history
Certain properties in ovl_lookup_data should be set only for the last
element of the path. IOW, if we are calling ovl_lookup_single() for an
absolute redirect, then d->is_dir and d->opaque do not make much sense
for intermediate path elements. Instead set them only if dentry being
lookup is last path element.

As of now we do not seem to be making use of d->opaque if it is set for
a path/dentry in lower. But just define the semantics so that future code
can make use of this assumption.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
  • Loading branch information
Vivek Goyal authored and Miklos Szeredi committed Apr 12, 2018
1 parent e9b77f9 commit 102b0d1
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions fs/overlayfs/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d,
{
struct dentry *this;
int err;
bool last_element = !post[0];

this = lookup_one_len_unlocked(name, base, namelen);
if (IS_ERR(this)) {
Expand Down Expand Up @@ -257,12 +258,15 @@ static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d,
goto put_and_out;
goto out;
}
d->is_dir = true;
if (last_element)
d->is_dir = true;
if (d->last)
goto out;

if (ovl_is_opaquedir(this)) {
d->stop = d->opaque = true;
d->stop = true;
if (last_element)
d->opaque = true;
goto out;
}
err = ovl_check_redirect(this, d, prelen, post);
Expand Down

0 comments on commit 102b0d1

Please sign in to comment.