On Tue 13-11-12 08:14:42, Tejun Heo wrote: > On Tue, Nov 13, 2012 at 04:30:36PM +0100, Michal Hocko wrote: > > @@ -1063,8 +1063,8 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, > > struct mem_cgroup *prev, > > struct mem_cgroup_reclaim_cookie *reclaim) > > { > > - struct mem_cgroup *memcg = NULL; > > - int id = 0; > > + struct mem_cgroup *memcg = NULL, > > + *last_visited = NULL; > > Nitpick but please don't do this. OK, will make it grep friendlier; > > + /* > > + * Root is not visited by cgroup iterators so it needs a special > > + * treatment. > > + */ > > + if (!last_visited) { > > + css = &root->css; > > + } else { > > + struct cgroup *next_cgroup; > > + > > + next_cgroup = cgroup_next_descendant_pre( > > + last_visited->css.cgroup, > > + root->css.cgroup); > > + if (next_cgroup) > > + css = cgroup_subsys_state(next_cgroup, > > + mem_cgroup_subsys_id); > > Hmmm... wouldn't it be better to move the reclaim logic into a > function and do the following? > > reclaim(root); > for_each_descendent_pre() > reclaim(descendant); We cannot do for_each_descendent_pre here because we do not iterate through the whole hierarchy all the time. Check shrink_zone. > If this is a problem, I'd be happy to add a iterator which includes > the top node. This would help with the above if-else but I do not think this is the worst thing in the function ;) > I'd prefer controllers not using the next functions directly. Well, we will need to use it directly because of the single group reclaim mentioned above. -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>