]> rtime.felk.cvut.cz Git - can-eth-gw-linux.git/commitdiff
cifs: rename cifs_readdir_lookup to cifs_prime_dcache and make it void return
authorJeff Layton <jlayton@redhat.com>
Mon, 3 Dec 2012 11:05:37 +0000 (06:05 -0500)
committerSteve French <smfrench@gmail.com>
Wed, 5 Dec 2012 22:54:38 +0000 (16:54 -0600)
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 <jlayton@redhat.com>
Signed-off-by: Steve French <smfrench@gmail.com>
fs/cifs/readdir.c

index 64920920d908fb4929c83c391cc73045f7fe7249..6002fdc920ae402dabad902e623b875288fa988e 100644 (file)
@@ -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);
@@ -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
@@ -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;
@@ -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;
 }