On Mon 01-08-16 11:03:43, Johannes Weiner wrote: > On Mon, Aug 01, 2016 at 04:12:28PM +0200, Michal Hocko wrote: [...] > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > > index c265212bec8c..c0b57b6a194e 100644 > > --- a/mm/memcontrol.c > > +++ b/mm/memcontrol.c > > @@ -2543,6 +2543,11 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, > > return ret; > > } > > > > +static inline bool soft_limit_tree_empty(struct mem_cgroup_tree_per_node *mctz) > > +{ > > + return RB_EMPTY_ROOT(&mctz->rb_root); > > +} > > Can you please fold this into the caller? It should be obvious enough. OK, fair enough. There will probably be no other callers. I've added comment as well > Other than that, this patch makes sense to me. > > Acked-by: Johannes Weiner <hannes@xxxxxxxxxxx> Thanks! If the following sounds good I will resend v2. --- diff --git a/mm/memcontrol.c b/mm/memcontrol.c index c0b57b6a194e..e56d6a0f92ac 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2543,11 +2543,6 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, return ret; } -static inline bool soft_limit_tree_empty(struct mem_cgroup_tree_per_node *mctz) -{ - return RB_EMPTY_ROOT(&mctz->rb_root); -} - unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order, gfp_t gfp_mask, unsigned long *total_scanned) @@ -2564,7 +2559,13 @@ unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order, return 0; mctz = soft_limit_tree_node(pgdat->node_id); - if (soft_limit_tree_empty(mctz)) + + /* + * Do not even bother to check the largest node if the node + * is empty. Do it lockless to prevent lock bouncing. Races + * are acceptable as soft limit is best effort anyway. + */ + if (RB_EMPTY_ROOT(&mctz->rb_root)) return 0; /* -- 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>