]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge branch 'for-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 9 Jun 2014 22:03:33 +0000 (15:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 9 Jun 2014 22:03:33 +0000 (15:03 -0700)
Pull cgroup updates from Tejun Heo:
 "A lot of activities on cgroup side.  Heavy restructuring including
  locking simplification took place to improve the code base and enable
  implementation of the unified hierarchy, which currently exists behind
  a __DEVEL__ mount option.  The core support is mostly complete but
  individual controllers need further work.  To explain the design and
  rationales of the the unified hierarchy

        Documentation/cgroups/unified-hierarchy.txt

  is added.

  Another notable change is css (cgroup_subsys_state - what each
  controller uses to identify and interact with a cgroup) iteration
  update.  This is part of continuing updates on css object lifetime and
  visibility.  cgroup started with reference count draining on removal
  way back and is now reaching a point where csses behave and are
  iterated like normal refcnted objects albeit with some complexities to
  allow distinguishing the state where they're being deleted.  The css
  iteration update isn't taken advantage of yet but is planned to be
  used to simplify memcg significantly"

* 'for-3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (77 commits)
  cgroup: disallow disabled controllers on the default hierarchy
  cgroup: don't destroy the default root
  cgroup: disallow debug controller on the default hierarchy
  cgroup: clean up MAINTAINERS entries
  cgroup: implement css_tryget()
  device_cgroup: use css_has_online_children() instead of has_children()
  cgroup: convert cgroup_has_live_children() into css_has_online_children()
  cgroup: use CSS_ONLINE instead of CGRP_DEAD
  cgroup: iterate cgroup_subsys_states directly
  cgroup: introduce CSS_RELEASED and reduce css iteration fallback window
  cgroup: move cgroup->serial_nr into cgroup_subsys_state
  cgroup: link all cgroup_subsys_states in their sibling lists
  cgroup: move cgroup->sibling and ->children into cgroup_subsys_state
  cgroup: remove cgroup->parent
  device_cgroup: remove direct access to cgroup->children
  memcg: update memcg_has_children() to use css_next_child()
  memcg: remove tasks/children test from mem_cgroup_force_empty()
  cgroup: remove css_parent()
  cgroup: skip refcnting on normal root csses and cgrp_dfl_root self css
  cgroup: use cgroup->self.refcnt for cgroup refcnting
  ...

1  2 
Documentation/cgroups/memory.txt
MAINTAINERS
block/bio.c
block/blk-throttle.c
block/cfq-iosched.c
kernel/cgroup.c
kernel/cpuset.c
kernel/events/core.c
kernel/sched/core.c
mm/memcontrol.c

Simple merge
diff --cc MAINTAINERS
Simple merge
diff --cc block/bio.c
Simple merge
Simple merge
Simple merge
diff --cc kernel/cgroup.c
Simple merge
diff --cc kernel/cpuset.c
Simple merge
Simple merge
Simple merge
diff --cc mm/memcontrol.c
index a9559b91603c640926072d5c1cf2801bb5b4d109,b6f91d61b3af955d93ed1847f53ae98368a6ee0d..a2c7bcb0e6ebf10672f91b8117aef69d08b41ade
@@@ -829,9 -833,9 +826,9 @@@ retry
         * we will to add it back at the end of reclaim to its correct
         * position in the tree.
         */
 -      __mem_cgroup_remove_exceeded(mz->memcg, mz, mctz);
 +      __mem_cgroup_remove_exceeded(mz, mctz);
        if (!res_counter_soft_limit_excess(&mz->memcg->res) ||
-               !css_tryget(&mz->memcg->css))
+           !css_tryget_online(&mz->memcg->css))
                goto retry;
  done:
        return mz;
@@@ -1061,19 -1074,10 +1058,19 @@@ static struct mem_cgroup *get_mem_cgrou
  
        rcu_read_lock();
        do {
 -              memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
 -              if (unlikely(!memcg))
 +              /*
 +               * Page cache insertions can happen withou an
 +               * actual mm context, e.g. during disk probing
 +               * on boot, loopback IO, acct() writes etc.
 +               */
 +              if (unlikely(!mm))
                        memcg = root_mem_cgroup;
-       } while (!css_tryget(&memcg->css));
 +              else {
 +                      memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
 +                      if (unlikely(!memcg))
 +                              memcg = root_mem_cgroup;
 +              }
+       } while (!css_tryget_online(&memcg->css));
        rcu_read_unlock();
        return memcg;
  }
@@@ -1533,7 -1540,7 +1531,7 @@@ static unsigned long mem_cgroup_margin(
  int mem_cgroup_swappiness(struct mem_cgroup *memcg)
  {
        /* root ? */
-       if (mem_cgroup_disabled() || !css_parent(&memcg->css))
 -      if (!memcg->css.parent)
++      if (mem_cgroup_disabled() || !memcg->css.parent)
                return vm_swappiness;
  
        return memcg->swappiness;
@@@ -5318,14 -5447,22 +5323,14 @@@ static int mem_cgroup_swappiness_write(
                                       struct cftype *cft, u64 val)
  {
        struct mem_cgroup *memcg = mem_cgroup_from_css(css);
 -      struct mem_cgroup *parent = mem_cgroup_from_css(memcg->css.parent);
 -
 -      if (val > 100 || !parent)
 -              return -EINVAL;
  
 -      mutex_lock(&memcg_create_mutex);
 -
 -      /* If under hierarchy, only empty-root can set this value */
 -      if ((parent->use_hierarchy) || memcg_has_children(memcg)) {
 -              mutex_unlock(&memcg_create_mutex);
 +      if (val > 100)
                return -EINVAL;
 -      }
  
-       if (css_parent(css))
 -      memcg->swappiness = val;
 -
 -      mutex_unlock(&memcg_create_mutex);
++      if (css->parent)
 +              memcg->swappiness = val;
 +      else
 +              vm_swappiness = val;
  
        return 0;
  }
@@@ -5657,11 -5794,18 +5662,11 @@@ static int mem_cgroup_oom_control_write
        struct cftype *cft, u64 val)
  {
        struct mem_cgroup *memcg = mem_cgroup_from_css(css);
 -      struct mem_cgroup *parent = mem_cgroup_from_css(memcg->css.parent);
  
        /* cannot set to root cgroup and only 0 and 1 are allowed */
-       if (!css_parent(css) || !((val == 0) || (val == 1)))
 -      if (!parent || !((val == 0) || (val == 1)))
++      if (!css->parent || !((val == 0) || (val == 1)))
                return -EINVAL;
  
 -      mutex_lock(&memcg_create_mutex);
 -      /* oom-kill-disable is a flag for subhierarchy. */
 -      if ((parent->use_hierarchy) || memcg_has_children(memcg)) {
 -              mutex_unlock(&memcg_create_mutex);
 -              return -EINVAL;
 -      }
        memcg->oom_kill_disable = val;
        if (!val)
                memcg_oom_recover(memcg);