On Mon 20-10-14 19:55:54, Vladimir Davydov wrote: > If we fail to reclaim anything from a cgroup during a soft reclaim pass > we want to get the next largest cgroup exceeding its soft limit. To > achieve this, we should obviously remove the current group from the tree > and then pick the largest group. Currently we have a weird loop instead. > Let's simplify it. > > Signed-off-by: Vladimir Davydov <[email protected]>
Acked-by: Michal Hocko <[email protected]> > --- > mm/memcontrol.c | 26 ++++---------------------- > 1 file changed, 4 insertions(+), 22 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index e957f0c80c6e..53393e27ff03 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -3507,34 +3507,16 @@ unsigned long mem_cgroup_soft_limit_reclaim(struct > zone *zone, int order, > nr_reclaimed += reclaimed; > *total_scanned += nr_scanned; > spin_lock_irq(&mctz->lock); > + __mem_cgroup_remove_exceeded(mz, mctz); > > /* > * If we failed to reclaim anything from this memory cgroup > * it is time to move on to the next cgroup > */ > next_mz = NULL; > - if (!reclaimed) { > - do { > - /* > - * Loop until we find yet another one. > - * > - * By the time we get the soft_limit lock > - * again, someone might have aded the > - * group back on the RB tree. Iterate to > - * make sure we get a different mem. > - * mem_cgroup_largest_soft_limit_node returns > - * NULL if no other cgroup is present on > - * the tree > - */ > - next_mz = > - __mem_cgroup_largest_soft_limit_node(mctz); > - if (next_mz == mz) > - css_put(&next_mz->memcg->css); > - else /* next_mz == NULL or other memcg */ > - break; > - } while (1); > - } > - __mem_cgroup_remove_exceeded(mz, mctz); > + if (!reclaimed) > + next_mz = __mem_cgroup_largest_soft_limit_node(mctz); > + > excess = soft_limit_excess(mz->memcg); > /* > * One school of thought says that we should not add > -- > 1.7.10.4 > -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

