|
@@ -904,9 +904,15 @@ static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, stru
|
|
|
|
|
|
lock_kernel();
|
|
|
|
|
|
- /* If we're doing an exclusive create, optimize away the lookup */
|
|
|
- if (nfs_is_exclusive_create(dir, nd))
|
|
|
- goto no_entry;
|
|
|
+ /*
|
|
|
+ * If we're doing an exclusive create, optimize away the lookup
|
|
|
+ * but don't hash the dentry.
|
|
|
+ */
|
|
|
+ if (nfs_is_exclusive_create(dir, nd)) {
|
|
|
+ d_instantiate(dentry, NULL);
|
|
|
+ res = NULL;
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
|
|
|
error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, &fhandle, &fattr);
|
|
|
if (error == -ENOENT)
|
|
@@ -1161,6 +1167,8 @@ int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle,
|
|
|
if (IS_ERR(inode))
|
|
|
return error;
|
|
|
d_instantiate(dentry, inode);
|
|
|
+ if (d_unhashed(dentry))
|
|
|
+ d_rehash(dentry);
|
|
|
return 0;
|
|
|
}
|
|
|
|