diff options
| -rw-r--r-- | fs/namespace.c | 3 | ||||
| -rw-r--r-- | fs/nfs/super.c | 8 | ||||
| -rw-r--r-- | include/linux/mnt_namespace.h | 1 | 
3 files changed, 11 insertions, 1 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index faab1273281..7d70d63ceb2 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -2068,7 +2068,7 @@ struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns,   * create_mnt_ns - creates a private namespace and adds a root filesystem   * @mnt: pointer to the new root filesystem mountpoint   */ -static struct mnt_namespace *create_mnt_ns(struct vfsmount *mnt) +struct mnt_namespace *create_mnt_ns(struct vfsmount *mnt)  {  	struct mnt_namespace *new_ns; @@ -2080,6 +2080,7 @@ static struct mnt_namespace *create_mnt_ns(struct vfsmount *mnt)  	}  	return new_ns;  } +EXPORT_SYMBOL(create_mnt_ns);  SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,  		char __user *, type, unsigned long, flags, void __user *, data) diff --git a/fs/nfs/super.c b/fs/nfs/super.c index d5b112bcf3d..ce907efc550 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -2648,13 +2648,21 @@ out_freepage:  static int nfs_follow_remote_path(struct vfsmount *root_mnt,  		const char *export_path, struct vfsmount *mnt_target)  { +	struct mnt_namespace *ns_private;  	struct nameidata nd;  	struct super_block *s;  	int ret; +	ns_private = create_mnt_ns(root_mnt); +	ret = PTR_ERR(ns_private); +	if (IS_ERR(ns_private)) +		goto out_mntput; +  	ret = vfs_path_lookup(root_mnt->mnt_root, root_mnt,  			export_path, LOOKUP_FOLLOW, &nd); +	put_mnt_ns(ns_private); +  	if (ret != 0)  		goto out_err; diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h index d9ebf1037df..d74785c2393 100644 --- a/include/linux/mnt_namespace.h +++ b/include/linux/mnt_namespace.h @@ -23,6 +23,7 @@ struct proc_mounts {  struct fs_struct; +extern struct mnt_namespace *create_mnt_ns(struct vfsmount *mnt);  extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *,  		struct fs_struct *);  extern void put_mnt_ns(struct mnt_namespace *ns);  |