|
@@ -260,6 +260,7 @@ xfs_vn_lookup(
|
|
|
struct dentry *dentry,
|
|
|
unsigned int flags)
|
|
|
{
|
|
|
+ struct inode *inode;
|
|
|
struct xfs_inode *cip;
|
|
|
struct xfs_name name;
|
|
|
int error;
|
|
@@ -269,14 +270,13 @@ xfs_vn_lookup(
|
|
|
|
|
|
xfs_dentry_to_name(&name, dentry);
|
|
|
error = xfs_lookup(XFS_I(dir), &name, &cip, NULL);
|
|
|
- if (unlikely(error)) {
|
|
|
- if (unlikely(error != -ENOENT))
|
|
|
- return ERR_PTR(error);
|
|
|
- d_add(dentry, NULL);
|
|
|
- return NULL;
|
|
|
- }
|
|
|
-
|
|
|
- return d_splice_alias(VFS_I(cip), dentry);
|
|
|
+ if (likely(!error))
|
|
|
+ inode = VFS_I(cip);
|
|
|
+ else if (likely(error == -ENOENT))
|
|
|
+ inode = NULL;
|
|
|
+ else
|
|
|
+ inode = ERR_PTR(error);
|
|
|
+ return d_splice_alias(inode, dentry);
|
|
|
}
|
|
|
|
|
|
STATIC struct dentry *
|