--- olpc-2.6-master.00/ipc/util.c 2007-02-28 20:05:29.000000000 -0500 +++ olpc-2.6-master-vs22x.02/ipc/util.c 2007-03-01 11:52:20.000000000 -0500 @@ -73,6 +75,7 @@ static struct ipc_namespace *clone_ipc_n goto err_shm; kref_init(&ns->kref); + atomic_inc(&vs_global_ipc_ns); return ns; err_shm: --- olpc-2.6-master.00/ipc/util.c 2007-02-28 20:05:29.000000000 -0500 +++ olpc-2.6-master-vs22x.02/ipc/util.c 2007-03-01 11:52:20.000000000 -0500 @@ -142,6 +145,7 @@ void free_ipc_ns(struct kref *kref) sem_exit_ns(ns); msg_exit_ns(ns); shm_exit_ns(ns); + atomic_dec(&vs_global_ipc_ns); kfree(ns); } #endif --- olpc-2.6-master.00/fs/namespace.c 2007-02-28 20:05:28.000000000 -0500 +++ olpc-2.6-master-vs22x.02/fs/namespace.c 2007-03-01 11:52:20.000000000 -0500 @@ -1498,6 +1580,7 @@ struct mnt_namespace *dup_mnt_ns(struct q = next_mnt(q, new_ns->root); } up_write(&namespace_sem); + atomic_inc(&vs_global_mnt_ns); if (rootmnt) mntput(rootmnt); --- olpc-2.6-master.00/fs/namespace.c 2007-02-28 20:05:28.000000000 -0500 +++ olpc-2.6-master-vs22x.02/fs/namespace.c 2007-03-01 11:52:20.000000000 -0500 @@ -1875,5 +1958,6 @@ void __put_mnt_ns(struct mnt_namespace * spin_unlock(&vfsmount_lock); up_write(&namespace_sem); release_mounts(&umount_list); + atomic_dec(&vs_global_mnt_ns); kfree(ns); } --- olpc-2.6-master.00/kernel/utsname.c 2007-02-28 20:05:29.000000000 -0500 +++ olpc-2.6-master-vs22x.02/kernel/utsname.c 2007-03-01 11:52:20.000000000 -0500 @@ -27,6 +28,7 @@ static struct uts_namespace *clone_uts_n if (ns) { memcpy(&ns->name, &old_ns->name, sizeof(ns->name)); kref_init(&ns->kref); + atomic_inc(&vs_global_uts_ns); } return ns; } --- olpc-2.6-master.00/kernel/exit.c 2007-02-28 20:05:29.000000000 -0500 +++ olpc-2.6-master-vs22x.02/kernel/exit.c 2007-03-01 11:52:20.000000000 -0500 @@ -514,6 +520,7 @@ static inline void __put_fs_struct(struc dput(fs->altroot); mntput(fs->altrootmnt); } + atomic_dec(&vs_global_fs); kmem_cache_free(fs_cachep, fs); } } --- olpc-2.6-master.00/include/linux/nsproxy.h 2007-02-28 20:05:29.000000000 -0500 +++ olpc-2.6-master-vs22x.02/include/linux/nsproxy.h 2007-03-01 11:52:20.000000000 -0500 @@ -36,6 +36,11 @@ int copy_namespaces(int flags, struct ta void get_task_namespaces(struct task_struct *tsk); void free_nsproxy(struct nsproxy *ns); +static inline void get_nsproxy(struct nsproxy *ns) +{ + atomic_inc(&ns->count); +} + static inline void put_nsproxy(struct nsproxy *ns) { if (atomic_dec_and_test(&ns->count)) { --- olpc-2.6-master.00/kernel/nsproxy.c 2007-02-28 20:05:29.000000000 -0500 +++ olpc-2.6-master-vs22x.02/kernel/nsproxy.c 2007-03-01 11:52:20.000000000 -0500 @@ -48,6 +44,7 @@ static inline struct nsproxy *clone_name ns = kmemdup(orig, sizeof(struct nsproxy), GFP_KERNEL); if (ns) atomic_set(&ns->count, 1); + atomic_inc(&vs_global_nsproxy); return ns; } --- olpc-2.6-master.00/kernel/utsname.c 2007-02-28 20:05:29.000000000 -0500 +++ olpc-2.6-master-vs22x.02/kernel/utsname.c 2007-03-01 11:52:20.000000000 -0500 @@ -91,5 +93,6 @@ void free_uts_ns(struct kref *kref) struct uts_namespace *ns; ns = container_of(kref, struct uts_namespace, kref); + atomic_dec(&vs_global_uts_ns); kfree(ns); }