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 #include +#include 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 #include #include +#include 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);