*/
  
  static int cgroup_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode);
 -static struct dentry *cgroup_lookup(struct inode *, struct dentry *, unsigned int);
  static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry);
- static int cgroup_populate_dir(struct cgroup *cgrp, bool base_files,
-                              unsigned long subsys_mask);
+ static int cgroup_populate_dir(struct cgroup *cgrp, unsigned long subsys_mask);
  static const struct inode_operations cgroup_dir_inode_operations;
  static const struct file_operations proc_cgroupstats_operations;
  
        if (!empty)
                return -EBUSY;
  
 +      /*
 +       * Make sure there's no live children.  We can't test ->children
 +       * emptiness as dead children linger on it while being destroyed;
 +       * otherwise, "rmdir parent/child parent" may fail with -EBUSY.
 +       */
 +      empty = true;
 +      rcu_read_lock();
 +      list_for_each_entry_rcu(child, &cgrp->children, sibling) {
 +              empty = cgroup_is_dead(child);
 +              if (!empty)
 +                      break;
 +      }
 +      rcu_read_unlock();
 +      if (!empty)
 +              return -EBUSY;
 +
        /*
-        * Block new css_tryget() by killing css refcnts.  cgroup core
-        * guarantees that, by the time ->css_offline() is invoked, no new
-        * css reference will be given out via css_tryget().  We can't
-        * simply call percpu_ref_kill() and proceed to offlining css's
-        * because percpu_ref_kill() doesn't guarantee that the ref is seen
-        * as killed on all CPUs on return.
-        *
-        * Use percpu_ref_kill_and_confirm() to get notifications as each
-        * css is confirmed to be seen as killed on all CPUs.  The
-        * notification callback keeps track of the number of css's to be
-        * killed and schedules cgroup_offline_fn() to perform the rest of
-        * destruction once the percpu refs of all css's are confirmed to
-        * be killed.
+        * Initiate massacre of all css's.  cgroup_destroy_css_killed()
+        * will be invoked to perform the rest of destruction once the
+        * percpu refs of all css's are confirmed to be killed.
         */
-       atomic_set(&cgrp->css_kill_cnt, 1);
-       for_each_root_subsys(cgrp->root, ss) {
-               struct cgroup_subsys_state *css = cgrp->subsys[ss->subsys_id];
- 
-               /*
-                * Killing would put the base ref, but we need to keep it
-                * alive until after ->css_offline.
-                */
-               percpu_ref_get(&css->refcnt);
- 
-               atomic_inc(&cgrp->css_kill_cnt);
-               percpu_ref_kill_and_confirm(&css->refcnt, css_ref_killed_fn);
-       }
-       cgroup_css_killed(cgrp);
+       for_each_root_subsys(cgrp->root, ss)
+               kill_css(cgroup_css(cgrp, ss));
  
        /*
         * Mark @cgrp dead.  This prevents further task migration and child
 
        FILE_SPREAD_SLAB,
  } cpuset_filetype_t;
  
- static int cpuset_write_u64(struct cgroup *cgrp, struct cftype *cft, u64 val)
+ static int cpuset_write_u64(struct cgroup_subsys_state *css, struct cftype *cft,
+                           u64 val)
  {
-       struct cpuset *cs = cgroup_cs(cgrp);
+       struct cpuset *cs = css_cs(css);
        cpuset_filetype_t type = cft->private;
 -      int retval = -ENODEV;
 +      int retval = 0;
  
        mutex_lock(&cpuset_mutex);
 -      if (!is_cpuset_online(cs))
 +      if (!is_cpuset_online(cs)) {
 +              retval = -ENODEV;
                goto out_unlock;
 +      }
  
        switch (type) {
        case FILE_CPU_EXCLUSIVE:
 
        mem_cgroup_invalidate_reclaim_iterators(memcg);
        mem_cgroup_reparent_charges(memcg);
        mem_cgroup_destroy_all_caches(memcg);
 +      vmpressure_cleanup(&memcg->vmpressure);
  }
  
- static void mem_cgroup_css_free(struct cgroup *cont)
+ static void mem_cgroup_css_free(struct cgroup_subsys_state *css)
  {
-       struct mem_cgroup *memcg = mem_cgroup_from_cont(cont);
+       struct mem_cgroup *memcg = mem_cgroup_from_css(css);
  
        memcg_destroy_kmem(memcg);
        __mem_cgroup_free(memcg);