On Fri, May 21, 2010 at 02:25:14PM -0400, Jeff Layton wrote: > 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@xxxxxxxxxx> > --- > 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); Should probably do res = dget(direntry) here and above. Thanks, Josef -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html