Messages in this thread | | | Subject | Re: [patch] cpusets: allow PF_THREAD_BOUND kworkers to escape from a cpuset | From | Mike Galbraith <> | Date | Mon, 10 Oct 2011 07:34:52 +0200 |
| |
Maybe the below (which seems to have been stillborn) should be done to cgroups as well. Postmortem: kthreadd is attached to a cgroup with no rt_runtime allocated, gives birth to severely handicapped kstop threads, humongous crash dump follows.
Fiddling with kthreadd is user error, but since it makes no sense to move the thing, why not just say no, and save the user's toes some needless wear and tear.
> If cpusets doesn't want to let PF_THREAD_BOUND threads out, how about > cpusets not letting userland scripts attach kthreadd instead? > > cpusets: disallow moving kthreadd into a cpuset. > > If kthreadd is moved into a cpuset, it's child may then acquire > PF_THREAD_BOUND and become trapped, making it's cpuset immortal. > > Signed-off-by: Mike Galbraith <efault@gmx.de> > > diff --git a/kernel/cpuset.c b/kernel/cpuset.c > index 10131fd..0d9cd04 100644 > --- a/kernel/cpuset.c > +++ b/kernel/cpuset.c > @@ -59,6 +59,7 @@ > #include <linux/mutex.h> > #include <linux/workqueue.h> > #include <linux/cgroup.h> > +#include <linux/kthread.h> > > /* > * Workqueue for cpuset related tasks. > @@ -1382,9 +1383,10 @@ static int cpuset_can_attach(struct cgroup_subsys *ss, struct cgroup *cont, > * set of allowed nodes is unnecessary. Thus, cpusets are not > * applicable for such threads. This prevents checking for success of > * set_cpus_allowed_ptr() on all attached tasks before cpus_allowed may > - * be changed. > + * be changed. We also disallow attaching kthreadd, to prevent it's > + * child from becoming trapped should it then acquire PF_THREAD_BOUND. > */ > - if (tsk->flags & PF_THREAD_BOUND) > + if (tsk->flags & PF_THREAD_BOUND || tsk == kthreadd_task) > return -EINVAL; > > return 0; >
| |