Each namespace is supposed to have its own proc mount. So add the struct vfsmount pointer to struct pid_namespace and introduce the helpers to initialize it properly. Signed-off-by: Pavel Emelianov <xemul@xxxxxxxxxx> --- fs/proc/root.c | 20 ++++++++++++++++++++ include/linux/pid_namespace.h | 3 +++ include/linux/proc_fs.h | 12 ++++++++++++ 3 files changed, 35 insertions(+) --- ./fs/proc/root.c.pidnswithproc 2007-06-15 15:05:16.000000000 +0400 +++ ./fs/proc/root.c 2007-06-15 15:12:25.000000000 +0400 @@ -107,6 +107,9 @@ void __init proc_root_init(void) unregister_filesystem(&proc_fs_type); return; } +#ifdef CONFIG_PID_NS + init_pid_ns.proc_mnt = proc_mnt; +#endif proc_misc_init(); proc_net = proc_mkdir("net", NULL); proc_net_stat = proc_mkdir("net/stat", NULL); @@ -222,6 +225,23 @@ struct proc_dir_entry * create_proc_root return de; } +int pid_ns_prepare_proc(struct pid_namespace *ns) +{ + struct vfsmount *mnt; + + mnt = kern_mount(&proc_fs_type); + if (IS_ERR(mnt)) + return PTR_ERR(mnt); + + ns->proc_mnt = mnt; + return 0; +} + +void pid_ns_release_proc(struct pid_namespace *ns) +{ + mntput(ns->proc_mnt); +} + EXPORT_SYMBOL(proc_symlink); EXPORT_SYMBOL(proc_mkdir); EXPORT_SYMBOL(create_proc_entry); --- ./include/linux/pid_namespace.h.pidnswithproc 2007-06-15 15:00:32.000000000 +0400 +++ ./include/linux/pid_namespace.h 2007-06-15 15:12:25.000000000 +0400 @@ -20,6 +20,9 @@ struct pid_namespace { struct pidmap pidmap[PIDMAP_ENTRIES]; int last_pid; struct task_struct *child_reaper; +#ifdef CONFIG_PROC_FS + struct vfsmount *proc_mnt; +#endif }; extern struct pid_namespace init_pid_ns; --- ./include/linux/proc_fs.h.pidnswithproc 2007-06-15 15:04:52.000000000 +0400 +++ ./include/linux/proc_fs.h 2007-06-15 15:12:25.000000000 +0400 @@ -144,6 +144,9 @@ extern const struct file_operations proc extern const struct file_operations proc_kmsg_operations; extern const struct file_operations ppc_htab_operations; +extern int pid_ns_prepare_proc(struct pid_namespace *ns); +extern void pid_ns_release_proc(struct pid_namespace *ns); + /* * proc_tty.c */ @@ -251,6 +254,15 @@ static inline void proc_tty_unregister_d extern struct proc_dir_entry proc_root; +static inline int pid_ns_prepare_proc(struct pid_namespace *ns) +{ + return 0; +} + +static inline void pid_ns_release_proc(struct pid_namespace *ns) +{ +} + #endif /* CONFIG_PROC_FS */ #if !defined(CONFIG_PROC_KCORE) _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers