Merge branch 'for-3.17' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 4 Aug 2014 17:11:28 +0000 (10:11 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 4 Aug 2014 17:11:28 +0000 (10:11 -0700)
Pull cgroup changes from Tejun Heo:
 "Mostly changes to get the v2 interface ready.  The core features are
  mostly ready now and I think it's reasonable to expect to drop the
  devel mask in one or two devel cycles at least for a subset of
  controllers.

   - cgroup added a controller dependency mechanism so that block cgroup
     can depend on memory cgroup.  This will be used to finally support
     IO provisioning on the writeback traffic, which is currently being
     implemented.

   - The v2 interface now uses a separate table so that the interface
     files for the new interface are explicitly declared in one place.
     Each controller will explicitly review and add the files for the
     new interface.

   - cpuset is getting ready for the hierarchical behavior which is in
     the similar style with other controllers so that an ancestor's
     configuration change doesn't change the descendants' configurations
     irreversibly and processes aren't silently migrated when a CPU or
     node goes down.

  All the changes are to the new interface and no behavior changed for
  the multiple hierarchies"

* 'for-3.17' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: (29 commits)
  cpuset: fix the WARN_ON() in update_nodemasks_hier()
  cgroup: initialize cgrp_dfl_root_inhibit_ss_mask from !->dfl_files test
  cgroup: make CFTYPE_ONLY_ON_DFL and CFTYPE_NO_ internal to cgroup core
  cgroup: distinguish the default and legacy hierarchies when handling cftypes
  cgroup: replace cgroup_add_cftypes() with cgroup_add_legacy_cftypes()
  cgroup: rename cgroup_subsys->base_cftypes to ->legacy_cftypes
  cgroup: split cgroup_base_files[] into cgroup_{dfl|legacy}_base_files[]
  cpuset: export effective masks to userspace
  cpuset: allow writing offlined masks to cpuset.cpus/mems
  cpuset: enable onlined cpu/node in effective masks
  cpuset: refactor cpuset_hotplug_update_tasks()
  cpuset: make cs->{cpus, mems}_allowed as user-configured masks
  cpuset: apply cs->effective_{cpus,mems}
  cpuset: initialize top_cpuset's configured masks at mount
  cpuset: use effective cpumask to build sched domains
  cpuset: inherit ancestor's masks if effective_{cpus, mems} becomes empty
  cpuset: update cs->effective_{cpus, mems} when config changes
  cpuset: update cpuset->effective_{cpus,mems} at hotplug
  cpuset: add cs->effective_cpus and cs->effective_mems
  cgroup: clean up sane_behavior handling
  ...

1  2 
block/blk-cgroup.c
kernel/cgroup.c
kernel/cpuset.c
kernel/sched/core.c
mm/memcontrol.c

Simple merge
diff --cc kernel/cgroup.c
index aad41f06901b57cb69235e6141c8501c2365183a,f2a6795e695be2ab432a7add3a26b7f7d319fd86..7dc8788cfd52dd222856057840a8d0a45a19816e
@@@ -1730,34 -1766,19 +1790,27 @@@ static struct dentry *cgroup_mount(stru
                        goto out_unlock;
                }
  
-               if ((root->flags ^ opts.flags) & CGRP_ROOT_OPTION_MASK) {
-                       if ((root->flags | opts.flags) & CGRP_ROOT_SANE_BEHAVIOR) {
-                               pr_err("sane_behavior: new mount options should match the existing superblock\n");
-                               ret = -EINVAL;
-                               goto out_unlock;
-                       } else {
-                               pr_warn("new mount options do not match the existing superblock, will be ignored\n");
-                       }
-               }
+               if (root->flags ^ opts.flags)
+                       pr_warn("new mount options do not match the existing superblock, will be ignored\n");
  
                /*
 -               * A root's lifetime is governed by its root cgroup.
 -               * tryget_live failure indicate that the root is being
 -               * destroyed.  Wait for destruction to complete so that the
 -               * subsystems are free.  We can use wait_queue for the wait
 -               * but this path is super cold.  Let's just sleep for a bit
 -               * and retry.
 +               * We want to reuse @root whose lifetime is governed by its
 +               * ->cgrp.  Let's check whether @root is alive and keep it
 +               * that way.  As cgroup_kill_sb() can happen anytime, we
 +               * want to block it by pinning the sb so that @root doesn't
 +               * get killed before mount is complete.
 +               *
 +               * With the sb pinned, tryget_live can reliably indicate
 +               * whether @root can be reused.  If it's being killed,
 +               * drain it.  We can use wait_queue for the wait but this
 +               * path is super cold.  Let's just sleep a bit and retry.
                 */
 -              if (!percpu_ref_tryget_live(&root->cgrp.self.refcnt)) {
 +              pinned_sb = kernfs_pin_sb(root->kf_root, NULL);
 +              if (IS_ERR(pinned_sb) ||
 +                  !percpu_ref_tryget_live(&root->cgrp.self.refcnt)) {
                        mutex_unlock(&cgroup_mutex);
 +                      if (!IS_ERR_OR_NULL(pinned_sb))
 +                              deactivate_super(pinned_sb);
                        msleep(10);
                        ret = restart_syscall();
                        goto out_free;
diff --cc kernel/cpuset.c
Simple merge
Simple merge
diff --cc mm/memcontrol.c
Simple merge