|
@@ -466,6 +466,8 @@ static void mem_cgroup_update_tree(struct mem_cgroup *memcg, struct page *page)
|
|
|
struct mem_cgroup_tree_per_node *mctz;
|
|
|
|
|
|
mctz = soft_limit_tree_from_page(page);
|
|
|
+ if (!mctz)
|
|
|
+ return;
|
|
|
/*
|
|
|
* Necessary to update all ancestors when hierarchy is used.
|
|
|
* because their event counter is not touched.
|
|
@@ -503,7 +505,8 @@ static void mem_cgroup_remove_from_trees(struct mem_cgroup *memcg)
|
|
|
for_each_node(nid) {
|
|
|
mz = mem_cgroup_nodeinfo(memcg, nid);
|
|
|
mctz = soft_limit_tree_node(nid);
|
|
|
- mem_cgroup_remove_exceeded(mz, mctz);
|
|
|
+ if (mctz)
|
|
|
+ mem_cgroup_remove_exceeded(mz, mctz);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2558,7 +2561,7 @@ unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
|
|
|
* is empty. Do it lockless to prevent lock bouncing. Races
|
|
|
* are acceptable as soft limit is best effort anyway.
|
|
|
*/
|
|
|
- if (RB_EMPTY_ROOT(&mctz->rb_root))
|
|
|
+ if (!mctz || RB_EMPTY_ROOT(&mctz->rb_root))
|
|
|
return 0;
|
|
|
|
|
|
/*
|