2014-04-15 09:23:28

by Kinglong Mee

[permalink] [raw]
Subject: [PATCH] NFS: Fix memroy leak for double mounts

When double mounting same nfs filesystem, the devname saved in d_fsdata
will be lost.The second mount should not change the devname that
be saved in d_fsdata.

Signed-off-by: Kinglong Mee <[email protected]>
---
fs/nfs/getroot.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/nfs/getroot.c b/fs/nfs/getroot.c
index 66984a9..b94f804 100644
--- a/fs/nfs/getroot.c
+++ b/fs/nfs/getroot.c
@@ -120,7 +120,8 @@ struct dentry *nfs_get_root(struct super_block *sb,
struct nfs_fh *mntfh,

security_d_instantiate(ret, inode);
spin_lock(&ret->d_lock);
- if (IS_ROOT(ret) && !(ret->d_flags & DCACHE_NFSFS_RENAMED)) {
+ if (IS_ROOT(ret) && !ret->d_fsdata &&
+ !(ret->d_flags & DCACHE_NFSFS_RENAMED)) {
ret->d_fsdata = name;
name = NULL;
}
--
1.9.0



2014-04-15 14:27:19

by Trond Myklebust

[permalink] [raw]
Subject: Re: [PATCH] NFS: Fix memroy leak for double mounts

On Tue, 2014-04-15 at 17:22 +0800, Kinglong Mee wrote:
> When double mounting same nfs filesystem, the devname saved in d_fsdata
> will be lost.The second mount should not change the devname that
> be saved in d_fsdata.
>
> Signed-off-by: Kinglong Mee <[email protected]>
> ---
> fs/nfs/getroot.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/fs/nfs/getroot.c b/fs/nfs/getroot.c
> index 66984a9..b94f804 100644
> --- a/fs/nfs/getroot.c
> +++ b/fs/nfs/getroot.c
> @@ -120,7 +120,8 @@ struct dentry *nfs_get_root(struct super_block *sb,
> struct nfs_fh *mntfh,
>
> security_d_instantiate(ret, inode);
> spin_lock(&ret->d_lock);
> - if (IS_ROOT(ret) && !(ret->d_flags & DCACHE_NFSFS_RENAMED)) {
> + if (IS_ROOT(ret) && !ret->d_fsdata &&
> + !(ret->d_flags & DCACHE_NFSFS_RENAMED)) {
> ret->d_fsdata = name;
> name = NULL;
> }

Applied. Thanks!

--
Trond Myklebust
Linux NFS client maintainer, PrimaryData
[email protected]