On Thu,  8 Aug 2013 17:24:46 +0200
Miklos Szeredi <[email protected]> wrote:

> From: Miklos Szeredi <[email protected]>
> 
> Do have_submounts(), shrink_dcache_parent() and d_drop() atomically.
> 
> check_submounts_and_drop() can deal with negative dentries and
> non-directories as well.
> 
> Non-directories can also be mounted on.  And just like directories we don't
> want these to disappear with invalidation.
> 
> Signed-off-by: Miklos Szeredi <[email protected]>
> CC: Trond Myklebust <[email protected]>
> ---
>  fs/nfs/dir.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
> index e474ca2b..7468735 100644
> --- a/fs/nfs/dir.c
> +++ b/fs/nfs/dir.c
> @@ -1135,14 +1135,13 @@ out_zap_parent:
>       if (inode && S_ISDIR(inode->i_mode)) {
>               /* Purge readdir caches. */
>               nfs_zap_caches(inode);
> -             /* If we have submounts, don't unhash ! */
> -             if (have_submounts(dentry))
> -                     goto out_valid;
>               if (dentry->d_flags & DCACHE_DISCONNECTED)
>                       goto out_valid;
> -             shrink_dcache_parent(dentry);
>       }
> -     d_drop(dentry);
> +     /* If we have submounts, don't unhash ! */
> +     if (check_submounts_and_drop(dentry) != 0)
> +             goto out_valid;
> +
>       dput(parent);
>       dfprintk(LOOKUPCACHE, "NFS: %s(%s/%s) is invalid\n",
>                       __func__, dentry->d_parent->d_name.name,

Acked-by: Jeff Layton <[email protected]>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to