make lookup_one_len() safe to use with directory locked shared
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 6 Apr 2018 20:45:33 +0000 (16:45 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 6 Apr 2018 20:45:33 +0000 (16:45 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namei.c

index ba48e15..6e0f6ee 100644 (file)
@@ -2471,6 +2471,7 @@ static int lookup_one_len_common(const char *name, struct dentry *base,
  */
 struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
 {
+       struct dentry *dentry;
        struct qstr this;
        int err;
 
@@ -2480,7 +2481,8 @@ struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
        if (err)
                return ERR_PTR(err);
 
-       return __lookup_hash(&this, base, 0);
+       dentry = lookup_dcache(&this, base, 0);
+       return dentry ? dentry : __lookup_slow(&this, base, 0);
 }
 EXPORT_SYMBOL(lookup_one_len);