return cgroup_memory_nokmem;
 }
 
-static void obj_cgroup_uncharge_pages(struct obj_cgroup *objcg,
-                                     unsigned int nr_pages);
+static void memcg_uncharge(struct mem_cgroup *memcg, unsigned int nr_pages);
 
 static void obj_cgroup_release(struct percpu_ref *ref)
 {
        WARN_ON_ONCE(nr_bytes & (PAGE_SIZE - 1));
        nr_pages = nr_bytes >> PAGE_SHIFT;
 
-       if (nr_pages)
-               obj_cgroup_uncharge_pages(objcg, nr_pages);
+       if (nr_pages) {
+               struct mem_cgroup *memcg;
+
+               memcg = get_mem_cgroup_from_objcg(objcg);
+               mod_memcg_state(memcg, MEMCG_KMEM, -nr_pages);
+               memcg1_account_kmem(memcg, -nr_pages);
+               if (!mem_cgroup_is_root(memcg))
+                       memcg_uncharge(memcg, nr_pages);
+               mem_cgroup_put(memcg);
+       }
 
        spin_lock_irqsave(&objcg_lock, flags);
        list_del(&objcg->list);