summaryrefslogtreecommitdiff
path: root/fs/overlayfs/super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/overlayfs/super.c')
-rw-r--r--fs/overlayfs/super.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index f72b82fdc1e6..5dbc6789fd5f 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -350,16 +350,12 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
if (IS_ERR(this))
goto out;
- /*
- * If this is not the lowermost layer, check whiteout and opaque
- * directory.
- */
- if (poe->numlower && this) {
+ if (this) {
if (ovl_is_whiteout(this)) {
dput(this);
this = NULL;
upperopaque = true;
- } else if (ovl_is_opaquedir(this)) {
+ } else if (poe->numlower && ovl_is_opaquedir(this)) {
upperopaque = true;
}
}
@@ -384,19 +380,16 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
goto out_put;
if (!this)
continue;
-
+ if (ovl_is_whiteout(this)) {
+ dput(this);
+ break;
+ }
/*
- * If this is not the lowermost layer, check whiteout and opaque
- * directory.
+ * Only makes sense to check opaque dir if this is not the
+ * lowermost layer.
*/
- if (i < poe->numlower - 1) {
- if (ovl_is_whiteout(this)) {
- dput(this);
- break;
- } else if (ovl_is_opaquedir(this)) {
- opaque = true;
- }
- }
+ if (i < poe->numlower - 1 && ovl_is_opaquedir(this))
+ opaque = true;
/*
* If this is a non-directory then stop here.
*