Skip to content

Commit

Permalink
cifs: rename cifs_readdir_lookup to cifs_prime_dcache and make it voi…
Browse files Browse the repository at this point in the history
…d return

The caller doesn't do anything with the dentry, so there's no point in
holding a reference to it on return. Also cifs_prime_dcache better
describes the actual purpose of the function.

Signed-off-by: Jeff Layton <[email protected]>
Signed-off-by: Steve French <[email protected]>
  • Loading branch information
jtlayton authored and smfrench committed Dec 5, 2012
1 parent 471b1f9 commit eb1b3fa
Showing 1 changed file with 18 additions and 24 deletions.
42 changes: 18 additions & 24 deletions fs/cifs/readdir.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,20 @@ static inline void dump_cifs_file_struct(struct file *file, char *label)
#endif /* DEBUG2 */

/*
* Attempt to preload the dcache with the results from the FIND_FIRST/NEXT
*
* Find the dentry that matches "name". If there isn't one, create one. If it's
* a negative dentry or the uniqueid changed, then drop it and recreate it.
*/
static struct dentry *
cifs_readdir_lookup(struct dentry *parent, struct qstr *name,
static void
cifs_prime_dcache(struct dentry *parent, struct qstr *name,
struct cifs_fattr *fattr)
{
struct dentry *dentry, *alias;
struct inode *inode;
struct super_block *sb = parent->d_inode->i_sb;

cFYI(1, "For %s", name->name);
cFYI(1, "%s: for %s", __func__, name->name);

if (parent->d_op && parent->d_op->d_hash)
parent->d_op->d_hash(parent, parent->d_inode, name);
Expand All @@ -87,37 +89,32 @@ cifs_readdir_lookup(struct dentry *parent, struct qstr *name,
dentry = d_lookup(parent, name);
if (dentry) {
int err;

inode = dentry->d_inode;
/* update inode in place if i_ino didn't change */
if (inode && CIFS_I(inode)->uniqueid == fattr->cf_uniqueid) {
cifs_fattr_to_inode(inode, fattr);
return dentry;
goto out;
}
err = d_invalidate(dentry);
dput(dentry);
if (err)
return NULL;
return;
}

dentry = d_alloc(parent, name);
if (dentry == NULL)
return NULL;
if (!dentry)
return;

inode = cifs_iget(sb, fattr);
if (!inode) {
dput(dentry);
return NULL;
}
if (!inode)
goto out;

alias = d_materialise_unique(dentry, inode);
if (alias != NULL) {
dput(dentry);
if (IS_ERR(alias))
return NULL;
dentry = alias;
}

return dentry;
if (alias && !IS_ERR(alias))
dput(alias);
out:
dput(dentry);
}

static void
Expand Down Expand Up @@ -662,7 +659,6 @@ static int cifs_filldir(char *find_entry, struct file *file, filldir_t filldir,
struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
struct cifs_dirent de = { NULL, };
struct cifs_fattr fattr;
struct dentry *dentry;
struct qstr name;
int rc = 0;
ino_t ino;
Expand Down Expand Up @@ -733,13 +729,11 @@ static int cifs_filldir(char *find_entry, struct file *file, filldir_t filldir,
*/
fattr.cf_flags |= CIFS_FATTR_NEED_REVAL;

ino = cifs_uniqueid_to_ino_t(fattr.cf_uniqueid);
dentry = cifs_readdir_lookup(file->f_dentry, &name, &fattr);
cifs_prime_dcache(file->f_dentry, &name, &fattr);

ino = cifs_uniqueid_to_ino_t(fattr.cf_uniqueid);
rc = filldir(dirent, name.name, name.len, file->f_pos, ino,
fattr.cf_dtype);

dput(dentry);
return rc;
}

Expand Down

0 comments on commit eb1b3fa

Please sign in to comment.