lkml.org 
[lkml]   [2011]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [patch] cpusets: allow PF_THREAD_BOUND kworkers to escape from a cpuset
    From
    Date

    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;
    >




    \
     
     \ /
      Last update: 2011-10-10 07:37    [W:0.023 / U:16.324 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site