diff options
Diffstat (limited to 'fs/nfs/super.c')
| -rw-r--r-- | fs/nfs/super.c | 16 | 
1 files changed, 5 insertions, 11 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index ce40e5c568ba..b961ceac66b4 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -2773,16 +2773,12 @@ static void nfs_referral_loop_unprotect(void)  static struct dentry *nfs_follow_remote_path(struct vfsmount *root_mnt,  		const char *export_path)  { -	struct nameidata *nd = NULL;  	struct mnt_namespace *ns_private;  	struct super_block *s;  	struct dentry *dentry; +	struct path path;  	int ret; -	nd = kmalloc(sizeof(*nd), GFP_KERNEL); -	if (nd == NULL) -		return ERR_PTR(-ENOMEM); -  	ns_private = create_mnt_ns(root_mnt);  	ret = PTR_ERR(ns_private);  	if (IS_ERR(ns_private)) @@ -2793,7 +2789,7 @@ static struct dentry *nfs_follow_remote_path(struct vfsmount *root_mnt,  		goto out_put_mnt_ns;  	ret = vfs_path_lookup(root_mnt->mnt_root, root_mnt, -			export_path, LOOKUP_FOLLOW, nd); +			export_path, LOOKUP_FOLLOW, &path);  	nfs_referral_loop_unprotect();  	put_mnt_ns(ns_private); @@ -2801,12 +2797,11 @@ static struct dentry *nfs_follow_remote_path(struct vfsmount *root_mnt,  	if (ret != 0)  		goto out_err; -	s = nd->path.mnt->mnt_sb; +	s = path.mnt->mnt_sb;  	atomic_inc(&s->s_active); -	dentry = dget(nd->path.dentry); +	dentry = dget(path.dentry); -	path_put(&nd->path); -	kfree(nd); +	path_put(&path);  	down_write(&s->s_umount);  	return dentry;  out_put_mnt_ns: @@ -2814,7 +2809,6 @@ out_put_mnt_ns:  out_mntput:  	mntput(root_mnt);  out_err: -	kfree(nd);  	return ERR_PTR(ret);  }  |