On Mon, Jun 03, 2013 at 12:18:51PM +0200, Michal Hocko wrote: > The caller of the iterator might know that some nodes or even subtrees > should be skipped but there is no way to tell iterators about that so > the only choice left is to let iterators to visit each node and do the > selection outside of the iterating code. This, however, doesn't scale > well with hierarchies with many groups where only few groups are > interesting. > > This patch adds mem_cgroup_iter_cond variant of the iterator with a > callback which gets called for every visited node. There are three > possible ways how the callback can influence the walk. Either the node > is visited, it is skipped but the tree walk continues down the tree or > the whole subtree of the current group is skipped. > > TODO is it correct to reclaim + cond together? What if the cache simply > skips interesting nodes which another predicate would find interesting? I don't know. Maybe it's just taste but it looks pretty ugly to me. Why does everything have to be folded into the iteration function? The iteration only depends on the current position. Can't you factor out skipping part outside the function rather than rolling into this monstery thing with predicate callback? Just test the condition outside and call a function to skip whatever is necessary? Also, cgroup_rightmost_descendant() can be pretty expensive depending on how your tree looks like. It travels to the rightmost child at each level until it can't. In extreme cases, you can travel the whole subtree. This usually isn't a problem for its usecases but yours may be different, I'm not sure. 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>