Ack: [Precise][Quantal][SRU] cifs: don't instantiate new dentries in readdir for inodes that need to be revalidated immediately

Brad Figg brad.figg at canonical.com
Mon Sep 9 16:10:31 UTC 2013


On 09/09/2013 09:02 AM, Luis Henriques wrote:
> From: Jeff Layton <jlayton at redhat.com>
> 
> BugLink: http://bugs.launchpad.net/bugs/1222442
> 
> David reported that commit c2b93e06 (cifs: only set ops for inodes in
> I_NEW state) caused a regression with mfsymlinks. Prior to that patch,
> if a mfsymlink dentry was instantiated at readdir time, the inode would
> get a new set of ops when it was revalidated. After that patch, this
> did not occur.
> 
> This patch addresses this by simply skipping instantiating dentries in
> the readdir codepath when we know that they will need to be immediately
> revalidated. The next attempt to use that dentry will cause a new lookup
> to occur (which is basically what we want to happen anyway).
> 
> Cc: <stable at vger.kernel.org>
> Cc: "Stefan (metze) Metzmacher" <metze at samba.org>
> Cc: Sachin Prabhu <sprabhu at redhat.com>
> Reported-and-Tested-by: David McBride <dwm37 at cam.ac.uk>
> Signed-off-by: Jeff Layton <jlayton at redhat.com>
> Signed-off-by: Steve French <smfrench at gmail.com>
> (back ported from commit 757c4f6260febff982276818bb946df89c1105aa)
> Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
> ---
>  fs/cifs/readdir.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
> index 4c37ed4..52a820a 100644
> --- a/fs/cifs/readdir.c
> +++ b/fs/cifs/readdir.c
> @@ -96,6 +96,14 @@ cifs_readdir_lookup(struct dentry *parent, struct qstr *name,
>  		dput(dentry);
>  	}
>  
> +	/*
> +	 * If we know that the inode will need to be revalidated immediately,
> +	 * then don't create a new dentry for it. We'll end up doing an on
> +	 * the wire call either way and this spares us an invalidation.
> +	 */
> +	if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL)
> +		return NULL;
> +
>  	dentry = d_alloc(parent, name);
>  	if (dentry == NULL)
>  		return NULL;
> 


-- 
Brad Figg brad.figg at canonical.com http://www.canonical.com




More information about the kernel-team mailing list