This is a note to let you know that I've just added the patch titled

    cifs: rename cifs_readdir_lookup to cifs_prime_dcache and make it void 
return

to the 3.7-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     
cifs-rename-cifs_readdir_lookup-to-cifs_prime_dcache-and-make-it-void-return.patch
and it can be found in the queue-3.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.


>From eb1b3fa5cdb9c27bdec8f262acf757a06588eb2d Mon Sep 17 00:00:00 2001
From: Jeff Layton <[email protected]>
Date: Mon, 3 Dec 2012 06:05:37 -0500
Subject: cifs: rename cifs_readdir_lookup to cifs_prime_dcache and make it void 
return

From: Jeff Layton <[email protected]>

commit eb1b3fa5cdb9c27bdec8f262acf757a06588eb2d upstream.

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]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 fs/cifs/readdir.c |   42 ++++++++++++++++++------------------------
 1 file changed, 18 insertions(+), 24 deletions(-)

--- a/fs/cifs/readdir.c
+++ b/fs/cifs/readdir.c
@@ -66,18 +66,20 @@ static inline void dump_cifs_file_struct
 #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 *paren
        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
@@ -652,7 +649,6 @@ static int cifs_filldir(char *find_entry
        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;
@@ -723,13 +719,11 @@ static int cifs_filldir(char *find_entry
                 */
                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;
 }
 


Patches currently in stable-queue which might be from [email protected] are

queue-3.7/cifs-rename-cifs_readdir_lookup-to-cifs_prime_dcache-and-make-it-void-return.patch
queue-3.7/smb3-mounts-fail-with-access-denied-to-some-servers.patch
queue-3.7/cifs-adjust-sequence-number-downward-after-signing-nt_cancel.patch
queue-3.7/cifs-don-t-compare-uniqueids-in-cifs_prime_dcache-unless-server-inode-numbers-are-in-use.patch
queue-3.7/cifs-move-check-for-null-socket-into-smb_send_rqst.patch
queue-3.7/nfs-don-t-extend-writes-to-cover-entire-page-if-pagecache-is-invalid.patch
queue-3.7/nfs-don-t-zero-out-the-rest-of-the-page-if-we-hit-the-eof-on-a-dio-read.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to