diff -NurpP --minimal linux-2.6.22-rc4-vs2.2.0-rc3/include/linux/nsproxy.h linux-2.6.22-rc4-vs2.2.0-rc3.1/include/linux/nsproxy.h
--- linux-2.6.22-rc4-vs2.2.0-rc3/include/linux/nsproxy.h	2007-06-15 07:06:17 +0200
+++ linux-2.6.22-rc4-vs2.2.0-rc3.1/include/linux/nsproxy.h	2007-06-16 05:37:45 +0200
@@ -3,6 +3,7 @@
 
 #include <linux/spinlock.h>
 #include <linux/sched.h>
+#include <linux/vserver/debug.h>
 
 struct mnt_namespace;
 struct uts_namespace;
@@ -38,26 +39,40 @@ void free_nsproxy(struct nsproxy *ns);
 int unshare_nsproxy_namespaces(unsigned long, struct nsproxy **,
 	struct fs_struct *);
 
-static inline void get_nsproxy(struct nsproxy *ns)
+#define	get_nsproxy(n)	__get_nsproxy(n, __FILE__, __LINE__)
+
+static inline void __get_nsproxy(struct nsproxy *ns,
+	const char *_file, int _line)
 {
+	vxlprintk(VXD_CBIT(space, 0), "get_nsproxy(%p[%u])",
+		ns, atomic_read(&ns->count), _file, _line);
 	atomic_inc(&ns->count);
 }
 
-static inline void put_nsproxy(struct nsproxy *ns)
+#define	put_nsproxy(n)	__put_nsproxy(n, __FILE__, __LINE__)
+
+static inline void __put_nsproxy(struct nsproxy *ns,
+	const char *_file, int _line)
 {
+	vxlprintk(VXD_CBIT(space, 0), "put_nsproxy(%p[%u])",
+		ns, atomic_read(&ns->count), _file, _line);
 	if (atomic_dec_and_test(&ns->count)) {
 		free_nsproxy(ns);
 	}
 }
 
-static inline void exit_task_namespaces(struct task_struct *p)
+#define	exit_task_namespaces(p)	__exit_task_namespaces(p, __FILE__, __LINE__)
+
+static inline void __exit_task_namespaces(struct task_struct *p,
+	const char *_file, int _line)
 {
 	struct nsproxy *ns = p->nsproxy;
 	if (ns) {
 		task_lock(p);
 		p->nsproxy = NULL;
 		task_unlock(p);
-		put_nsproxy(ns);
+		__put_nsproxy(ns, _file, _line);
 	}
 }
+
 #endif
diff -NurpP --minimal linux-2.6.22-rc4-vs2.2.0-rc3/include/linux/vserver/debug.h linux-2.6.22-rc4-vs2.2.0-rc3.1/include/linux/vserver/debug.h
--- linux-2.6.22-rc4-vs2.2.0-rc3/include/linux/vserver/debug.h	2007-06-15 02:37:04 +0200
+++ linux-2.6.22-rc4-vs2.2.0-rc3.1/include/linux/vserver/debug.h	2007-06-16 05:47:03 +0200
@@ -34,6 +34,7 @@ extern unsigned int vx_debug_cres;
 extern unsigned int vx_debug_dlim;
 extern unsigned int vx_debug_quota;
 extern unsigned int vx_debug_cvirt;
+extern unsigned int vx_debug_space;
 extern unsigned int vx_debug_misc;
 
 
diff -NurpP --minimal linux-2.6.22-rc4-vs2.2.0-rc3/kernel/nsproxy.c linux-2.6.22-rc4-vs2.2.0-rc3.1/kernel/nsproxy.c
--- linux-2.6.22-rc4-vs2.2.0-rc3/kernel/nsproxy.c	2007-06-15 07:07:13 +0200
+++ linux-2.6.22-rc4-vs2.2.0-rc3.1/kernel/nsproxy.c	2007-06-16 05:44:48 +0200
@@ -21,6 +21,7 @@
 #include <linux/utsname.h>
 #include <linux/pid_namespace.h>
 #include <linux/vserver/global.h>
+#include <linux/vserver/debug.h>
 
 struct nsproxy init_nsproxy = INIT_NSPROXY(init_nsproxy);
 
@@ -42,6 +43,8 @@ static inline struct nsproxy *clone_nspr
 	ns = kmemdup(orig, sizeof(struct nsproxy), GFP_KERNEL);
 	if (ns)
 		atomic_set(&ns->count, 1);
+	vxdprintk(VXD_CBIT(space, 2), "clone_nsproxy(%p[%u] = %p[1]",
+		orig, atomic_read(&orig->count), ns);
 	atomic_inc(&vs_global_nsproxy);
 	return ns;
 }
@@ -56,6 +59,10 @@ static struct nsproxy *unshare_namespace
 {
 	struct nsproxy *new_nsp;
 
+	vxdprintk(VXD_CBIT(space, 4),
+		"unshare_namespaces(0x%08x,%p,%p)",
+		flags, orig, new_fs);
+
 	new_nsp = clone_nsproxy(orig);
 	if (!new_nsp)
 		return ERR_PTR(-ENOMEM);
@@ -129,6 +136,9 @@ int copy_namespaces(int flags, struct ta
 	struct nsproxy *new_ns;
 	int err = 0;
 
+	vxdprintk(VXD_CBIT(space, 7), "copy_namespaces(0x%08x,%p[%p])",
+		flags, tsk, old_ns);
+
 	if (!old_ns)
 		return 0;
 
@@ -151,6 +161,9 @@ int copy_namespaces(int flags, struct ta
 	tsk->nsproxy = new_ns;
 out:
 	put_nsproxy(old_ns);
+	vxdprintk(VXD_CBIT(space, 3),
+		"copy_namespaces(0x%08x,%p[%p]) = %d [%p]",
+		flags, tsk, old_ns, err, new_ns);
 	return err;
 }
 
@@ -179,6 +192,10 @@ int unshare_nsproxy_namespaces(unsigned 
 	struct nsproxy *old_ns = current->nsproxy;
 	int err = 0;
 
+	vxdprintk(VXD_CBIT(space, 4),
+		"unshare_nsproxy_namespaces(0x%08x,[%p])",
+		unshare_flags, old_ns);
+
 	if (!(unshare_flags & (CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWIPC)))
 		return 0;
 
diff -NurpP --minimal linux-2.6.22-rc4-vs2.2.0-rc3/kernel/vserver/sysctl.c linux-2.6.22-rc4-vs2.2.0-rc3.1/kernel/vserver/sysctl.c
--- linux-2.6.22-rc4-vs2.2.0-rc3/kernel/vserver/sysctl.c	2007-06-15 02:37:04 +0200
+++ linux-2.6.22-rc4-vs2.2.0-rc3.1/kernel/vserver/sysctl.c	2007-06-16 05:31:20 +0200
@@ -35,6 +35,7 @@ enum {
 	CTL_DEBUG_DLIM,
 	CTL_DEBUG_QUOTA,
 	CTL_DEBUG_CVIRT,
+	CTL_DEBUG_SPACE,
 	CTL_DEBUG_MISC,
 };
 
@@ -49,6 +50,7 @@ unsigned int vx_debug_cres	= 0;
 unsigned int vx_debug_dlim	= 0;
 unsigned int vx_debug_quota	= 0;
 unsigned int vx_debug_cvirt	= 0;
+unsigned int vx_debug_space	= 0;
 unsigned int vx_debug_misc	= 0;
 
 
@@ -152,6 +154,7 @@ static ctl_table debug_table[] = {
 	CTL_ENTRY(CTL_DEBUG_DLIM,	debug_dlim),
 	CTL_ENTRY(CTL_DEBUG_QUOTA,	debug_quota),
 	CTL_ENTRY(CTL_DEBUG_CVIRT,	debug_cvirt),
+	CTL_ENTRY(CTL_DEBUG_SPACE,	debug_space),
 	CTL_ENTRY(CTL_DEBUG_MISC,	debug_misc),
 	{ .ctl_name = 0 }
 };
@@ -178,6 +181,7 @@ static match_table_t tokens = {
 	{ CTL_DEBUG_DLIM,	"dlim=%x"	},
 	{ CTL_DEBUG_QUOTA,	"quota=%x"	},
 	{ CTL_DEBUG_CVIRT,	"cvirt=%x"	},
+	{ CTL_DEBUG_SPACE,	"space=%x"	},
 	{ CTL_DEBUG_MISC,	"misc=%x"	},
 	{ CTL_DEBUG_ERROR,	NULL		}
 };
@@ -216,6 +220,7 @@ static int __init vs_debug_setup(char *s
 		HANDLE_CASE(DLIM,   dlim,   value);
 		HANDLE_CASE(QUOTA,  quota,  value);
 		HANDLE_CASE(CVIRT,  cvirt,  value);
+		HANDLE_CASE(SPACE,  space,  value);
 		HANDLE_CASE(MISC,   misc,   value);
 		default:
 			return -EINVAL;
@@ -238,5 +243,6 @@ EXPORT_SYMBOL_GPL(vx_debug_cres);
 EXPORT_SYMBOL_GPL(vx_debug_dlim);
 EXPORT_SYMBOL_GPL(vx_debug_quota);
 EXPORT_SYMBOL_GPL(vx_debug_cvirt);
+EXPORT_SYMBOL_GPL(vx_debug_space);
 EXPORT_SYMBOL_GPL(vx_debug_misc);