Hello, Michal. On Thu, Nov 15, 2012 at 04:12:55PM +0100, Michal Hocko wrote: > > Because I'd like to consider the next functions as implementation > > detail, and having interations structred as loops tend to read better > > and less error-prone. e.g. when you use next functions directly, it's > > way easier to circumvent locking requirements in a way which isn't > > very obvious. > > The whole point behind mem_cgroup_iter is to hide all the complexity > behind memcg iteration. Memcg code either use for_each_mem_cgroup_tree > for !reclaim case and mem_cgroup_iter otherwise. > > > So, unless it messes up the code too much (and I can't see why it > > would), I'd much prefer if memcg used for_each_*() macros. > > As I said this would mean that the current mem_cgroup_iter code would > have to be inverted which doesn't simplify the code much. I'd rather > hide all the grossy details inside the memcg iterator. > Or am I still missing your suggestion? One way or the other, I don't think the code complexity would change much. Again, I'd much *prefer* if memcg used what other controllers would be using, but that's a preference and if necessary we can keep the next functions as exposed APIs. I think the issue I have is that I can't see much technical justification for that. If the code becomes much simpler by choosing one over the other, sure, but is that the case here? Isn't it mostly just about where to put the same things? If so, what would be the rationale for requiring a different interface? Thanks. -- tejun -- 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>