OSDN Git Service

adfs_lookup: do not fail with ENOENT on negatives, use d_splice_alias()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 1 May 2018 02:57:42 +0000 (22:57 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 22 May 2018 18:27:56 +0000 (14:27 -0400)
Cc: Russell King <linux@armlinux.org.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/adfs/dir.c

index 77a2d6c..e18eff8 100644 (file)
@@ -252,17 +252,17 @@ adfs_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
 
        error = adfs_dir_lookup_byname(dir, &dentry->d_name, &obj);
        if (error == 0) {
-               error = -EACCES;
                /*
                 * This only returns NULL if get_empty_inode
                 * fails.
                 */
                inode = adfs_iget(dir->i_sb, &obj);
-               if (inode)
-                       error = 0;
+               if (!inode)
+                       inode = ERR_PTR(-EACCES);
+       } else if (error != -ENOENT) {
+               inode = ERR_PTR(error);
        }
-       d_add(dentry, inode);
-       return ERR_PTR(error);
+       return d_splice_alias(inode, dentry);
 }
 
 /*