[linux-cifs-client] [PATCH 1/4] cifs: make cifs_lookup return a dentry
Jeff Layton
jlayton at redhat.com
Fri May 21 12:25:14 MDT 2010
cifs_lookup doesn't actually return a dentry. It instantiates the one
that's passed in, but callers don't have any way to know if the lookup
succeeded.
Signed-off-by: Jeff Layton <jlayton at redhat.com>
---
fs/cifs/dir.c | 13 +++++++++----
1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
index 391816b..54de8e5 100644
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -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
--
1.6.6.1
More information about the linux-cifs-client
mailing list