|
@@ -1199,7 +1199,6 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root,
|
|
|
|
|
|
mz = mem_cgroup_zoneinfo(root, nid, zid);
|
|
|
iter = &mz->reclaim_iter[reclaim->priority];
|
|
|
- last_visited = iter->last_visited;
|
|
|
if (prev && reclaim->generation != iter->generation) {
|
|
|
iter->last_visited = NULL;
|
|
|
goto out_unlock;
|
|
@@ -1218,13 +1217,12 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root,
|
|
|
* is alive.
|
|
|
*/
|
|
|
dead_count = atomic_read(&root->dead_count);
|
|
|
- smp_rmb();
|
|
|
- last_visited = iter->last_visited;
|
|
|
- if (last_visited) {
|
|
|
- if ((dead_count != iter->last_dead_count) ||
|
|
|
- !css_tryget(&last_visited->css)) {
|
|
|
+ if (dead_count == iter->last_dead_count) {
|
|
|
+ smp_rmb();
|
|
|
+ last_visited = iter->last_visited;
|
|
|
+ if (last_visited &&
|
|
|
+ !css_tryget(&last_visited->css))
|
|
|
last_visited = NULL;
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|