@@ -639,6 +639,7 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
struct inode *newInode = NULL;
char *full_path = NULL;
struct file *filp;
+ struct dentry *res;
xid = GetXid();
@@ -738,7 +739,8 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
/* since paths are not looked up by component - the parent
directories are presumed to be good here */
renew_parental_timestamps(direntry);
-
+ res = direntry;
+ dget(res);
} else if (rc == -ENOENT) {
rc = 0;
direntry->d_time = jiffies;
@@ -747,17 +749,20 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
else
direntry->d_op = &cifs_dentry_ops;
d_add(direntry, NULL);
- /* if it was once a directory (but how can we tell?) we could do
- shrink_dcache_parent(direntry); */
+ res = direntry;
+ dget(res);
} else if (rc != -EACCES) {
cERROR(1, "Unexpected lookup error %d", rc);
/* We special case check for Access Denied - since that
is a common return code */
+ res = ERR_PTR(rc);
+ } else {
+ res = ERR_PTR(rc);
}
kfree(full_path);
FreeXid(xid);
- return ERR_PTR(rc);
+ return res;
}
static int