diff -NurpP linux-2.6.38-vs2.3.0.37-rc8.1/kernel/vserver/context.c linux-2.6.38-vs2.3.0.37-rc8.2/kernel/vserver/context.c --- linux-2.6.38-vs2.3.0.37-rc8.1/kernel/vserver/context.c 2011-01-31 22:46:59.000000000 +0100 +++ linux-2.6.38-vs2.3.0.37-rc8.2/kernel/vserver/context.c 2011-03-22 17:35:46.000000000 +0100 @@ -780,10 +780,10 @@ int vc_task_xid(uint32_t id) if (id) { struct task_struct *tsk; - read_lock(&tasklist_lock); + rcu_read_lock(); tsk = find_task_by_real_pid(id); xid = (tsk) ? tsk->xid : -ESRCH; - read_unlock(&tasklist_lock); + rcu_read_unlock(); } else xid = vx_current_xid(); return xid; diff -NurpP linux-2.6.38-vs2.3.0.37-rc8.1/kernel/vserver/network.c linux-2.6.38-vs2.3.0.37-rc8.2/kernel/vserver/network.c --- linux-2.6.38-vs2.3.0.37-rc8.1/kernel/vserver/network.c 2011-01-29 02:01:07.000000000 +0100 +++ linux-2.6.38-vs2.3.0.37-rc8.2/kernel/vserver/network.c 2011-03-22 17:36:23.000000000 +0100 @@ -518,10 +518,10 @@ int vc_task_nid(uint32_t id) if (id) { struct task_struct *tsk; - read_lock(&tasklist_lock); + rcu_read_lock(); tsk = find_task_by_real_pid(id); nid = (tsk) ? tsk->nid : -ESRCH; - read_unlock(&tasklist_lock); + rcu_read_unlock(); } else nid = nx_current_nid(); return nid; diff -NurpP linux-2.6.38-vs2.3.0.37-rc8.1/kernel/vserver/signal.c linux-2.6.38-vs2.3.0.37-rc8.2/kernel/vserver/signal.c --- linux-2.6.38-vs2.3.0.37-rc8.1/kernel/vserver/signal.c 2011-01-29 02:01:07.000000000 +0100 +++ linux-2.6.38-vs2.3.0.37-rc8.2/kernel/vserver/signal.c 2011-03-22 17:37:59.000000000 +0100 @@ -57,7 +57,9 @@ int vx_info_kill(struct vx_info *vxi, in } /* fallthrough */ default: + rcu_read_lock(); p = find_task_by_real_pid(pid); + rcu_read_unlock(); if (p) { if (vx_task_xid(p) == vxi->vx_id) retval = group_send_sig_info(sig, sip, p); diff -NurpP linux-2.6.38-vs2.3.0.37-rc8.1/kernel/vserver/tag.c linux-2.6.38-vs2.3.0.37-rc8.2/kernel/vserver/tag.c --- linux-2.6.38-vs2.3.0.37-rc8.1/kernel/vserver/tag.c 2011-01-29 02:01:07.000000000 +0100 +++ linux-2.6.38-vs2.3.0.37-rc8.2/kernel/vserver/tag.c 2011-03-22 17:43:07.000000000 +0100 @@ -45,10 +45,10 @@ int vc_task_tag(uint32_t id) if (id) { struct task_struct *tsk; - read_lock(&tasklist_lock); + rcu_read_lock(); tsk = find_task_by_real_pid(id); tag = (tsk) ? tsk->tag : -ESRCH; - read_unlock(&tasklist_lock); + rcu_read_unlock(); } else tag = dx_current_tag(); return tag;