diff options
Diffstat (limited to 'fs/cifs/dir.c')
| -rw-r--r-- | fs/cifs/dir.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index d172c8ed9017..ec4e9a2a12f8 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c | |||
| @@ -668,12 +668,19 @@ cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd) | |||
| 668 | return 0; | 668 | return 0; |
| 669 | else { | 669 | else { |
| 670 | /* | 670 | /* |
| 671 | * Forcibly invalidate automounting directory inodes | 671 | * If the inode wasn't known to be a dfs entry when |
| 672 | * (remote DFS directories) so to have them | 672 | * the dentry was instantiated, such as when created |
| 673 | * instantiated again for automount | 673 | * via ->readdir(), it needs to be set now since the |
| 674 | * attributes will have been updated by | ||
| 675 | * cifs_revalidate_dentry(). | ||
| 674 | */ | 676 | */ |
| 675 | if (IS_AUTOMOUNT(direntry->d_inode)) | 677 | if (IS_AUTOMOUNT(direntry->d_inode) && |
| 676 | return 0; | 678 | !(direntry->d_flags & DCACHE_NEED_AUTOMOUNT)) { |
| 679 | spin_lock(&direntry->d_lock); | ||
| 680 | direntry->d_flags |= DCACHE_NEED_AUTOMOUNT; | ||
| 681 | spin_unlock(&direntry->d_lock); | ||
| 682 | } | ||
| 683 | |||
| 677 | return 1; | 684 | return 1; |
| 678 | } | 685 | } |
| 679 | } | 686 | } |
