[lkml]   [2011]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectRe: query: [PATCH 2/2] cgroup: Remove call to synchronize_rcu in cgroup_attach_task
    (ok crickets, keep the noise down please)

    On Thu, 2011-04-28 at 11:38 +0200, Mike Galbraith wrote:

    > The explosions are because the logic to snag rmdir() should anyone grab
    > a reference will let us zip right through and free a cgroup while
    > there's a destruction in flight. Adding a cgrp->count check before
    > trying to cgroup_clear_css_refs() prevents the explosions, but that
    > leaves RCU grace periods still embedded in userspace.
    > So...
    > I bent up put_css_set() a bit to try to destroy synchronously on final
    > put if possible, so rmdir() will only be snagged if that fails. The
    > thing seems to be working, so I'll show it. Readers (beware) may notice
    > some gratuitous looking chicken scratches. Just ignore those, and move
    > along smartly to the suggesting a much better way part, for surely one
    > must exist.

    Hi Self, (*howdy*)

    You might try the below. No weird gyrations to accomplish the same
    thing, and I see no slub debug gripes, no list debug gripes, nada.

    Makes one wonder what these things do for a living.

    diff --git a/kernel/cgroup.c b/kernel/cgroup.c
    index 25c7eb5..b8c64bf 100644
    --- a/kernel/cgroup.c
    +++ b/kernel/cgroup.c
    @@ -826,13 +826,6 @@ static void cgroup_diput(struct dentry *dentry, struct inode *inode)
    struct cgroup *cgrp = dentry->d_fsdata;
    struct cgroup_subsys *ss;
    - /* It's possible for external users to be holding css
    - * reference counts on a cgroup; css_put() needs to
    - * be able to access the cgroup after decrementing
    - * the reference count in order to know if it needs to
    - * queue the cgroup to be handled by the release
    - * agent */
    - synchronize_rcu();

    @@ -1822,7 +1815,6 @@ int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
    ss->attach(ss, cgrp, oldcgrp, tsk, false);
    set_bit(CGRP_RELEASABLE, &oldcgrp->flags);
    - synchronize_rcu();


     \ /
      Last update: 2011-04-29 14:37    [W:0.412 / U:12.344 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site