Eric W. Biederman 0a01f2cc39 pidns: Make the pidns proc mount/umount logic obvious.
Track the number of pids in the proc hash table.  When the number of
pids goes to 0 schedule work to unmount the kernel mount of proc.

Move the mount of proc into alloc_pid when we allocate the pid for
init.

Remove the surprising calls of pid_ns_release proc in fork and
proc_flush_task.  Those code paths really shouldn't know about proc
namespace implementation details and people have demonstrated several
times that finding and understanding those code paths is difficult and
non-obvious.

Because of the call path detach pid is alwasy called with the
rtnl_lock held free_pid is not allowed to sleep, so the work to
unmounting proc is moved to a work queue.  This has the side benefit
of not blocking the entire world waiting for the unnecessary
rcu_barrier in deactivate_locked_super.

In the process of making the code clear and obvious this fixes a bug
reported by Gao feng <gaofeng@cn.fujitsu.com> where we would leak a
mount of proc during clone(CLONE_NEWPID|CLONE_NEWNET) if copy_pid_ns
succeeded and copy_net_ns failed.

Acked-by: "Serge E. Hallyn" <serge@hallyn.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
2012-11-19 05:59:10 -08:00
..
2012-10-09 23:33:38 -04:00
2012-10-09 23:33:38 -04:00
2012-10-09 15:04:25 +01:00
2012-10-17 09:18:38 -05:00
2012-10-09 18:35:22 -04:00
2012-10-09 16:22:17 +09:00
2012-10-09 16:22:17 +09:00
2012-10-06 03:05:31 +09:00
2012-10-09 23:33:39 -04:00
2012-10-09 16:22:17 +09:00
2012-10-09 23:33:39 -04:00
2012-09-07 14:57:46 -04:00
2012-10-22 08:50:37 +03:00
2012-10-16 13:36:50 -04:00
2012-10-09 15:52:31 +09:00
2012-10-09 18:35:22 -04:00
2012-09-26 21:08:52 -04:00
2012-10-09 23:33:39 -04:00