Messages in this thread | | | Subject | Re: [PATCH] CIFS: fix automount for DFS shares | From | Ian Kent <> | Date | Sun, 23 Oct 2011 19:14:34 +0800 |
| |
On Fri, 2011-10-07 at 13:09 +0200, Gerlando Falauto wrote: > Automounting directories are now invalidated by .d_revalidate() > so to be d_instantiate()d again with the right DCACHE_NEED_AUTOMOUNT > flag
But why doesn't CIFS know this is a DFS inode the first time around, it appears to do a truck load of work looking that stuff up?
> > Signed-off-by: Gerlando Falauto <gerlando.falauto@keymile.com> > --- > fs/cifs/dir.c | 7 ++++++- > 1 files changed, 6 insertions(+), 1 deletions(-) > > diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c > index 9ea65cf..67f54d3 100644 > --- a/fs/cifs/dir.c > +++ b/fs/cifs/dir.c > @@ -637,8 +637,13 @@ cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd) > if (direntry->d_inode) { > if (cifs_revalidate_dentry(direntry)) > return 0; > - else > + else { > + /* We want automonting inodes to be > + * considered invalid or so */ > + if (IS_AUTOMOUNT(direntry->d_inode)) > + return 0;
I'd be inclined to set DCACHE_NEED_AUTOMOUNT here but are we certain that cifs_revalidate_dentry() will always return 0 for a DFS inode or at least ones that don't yet have DCACHE_NEED_AUTOMOUNT set and why?
> return 1; > + } > } > > /*
| |