Since we do not change memcg->kmemcg_id before calling memcg_drain_all_list_lrus(), so we do not need to take kmemcg_id as parameter. The two parameters of memcg_drain_all_list_lrus() seems odd, one is kmemcg_id, another is memcg. Now we can change the kmemcg_id to the memcg. It is more consistent. Since the purpose of the memcg_drain_all_list_lrus() is list_lru reparenting. So also rename it to memcg_reparent_list_lrus(). The name is also consistent with memcg_reparent_objcgs(). Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx> --- include/linux/list_lru.h | 2 +- mm/list_lru.c | 23 ++++++++++++----------- mm/memcontrol.c | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/include/linux/list_lru.h b/include/linux/list_lru.h index 9dcaa3e582c9..e8a5e3a2c0dd 100644 --- a/include/linux/list_lru.h +++ b/include/linux/list_lru.h @@ -70,7 +70,7 @@ int __list_lru_init(struct list_lru *lru, bool memcg_aware, __list_lru_init((lru), true, NULL, shrinker) int memcg_update_all_list_lrus(int num_memcgs); -void memcg_drain_all_list_lrus(int src_idx, struct mem_cgroup *dst_memcg); +void memcg_reparent_list_lrus(struct mem_cgroup *memcg, struct mem_cgroup *parent); /** * list_lru_add: add an element to the lru list's tail diff --git a/mm/list_lru.c b/mm/list_lru.c index 4962d48d4410..d78dba5a6dab 100644 --- a/mm/list_lru.c +++ b/mm/list_lru.c @@ -523,11 +523,11 @@ int memcg_update_all_list_lrus(int new_size) goto out; } -static void memcg_drain_list_lru_node(struct list_lru *lru, int nid, - int src_idx, struct mem_cgroup *dst_memcg) +static void memcg_reparent_list_lru_node(struct list_lru *lru, int nid, + struct mem_cgroup *memcg, + struct mem_cgroup *parent) { struct list_lru_node *nlru = &lru->node[nid]; - int dst_idx = dst_memcg->kmemcg_id; struct list_lru_one *src, *dst; /* @@ -536,22 +536,23 @@ static void memcg_drain_list_lru_node(struct list_lru *lru, int nid, */ spin_lock_irq(&nlru->lock); - src = list_lru_from_memcg_idx(nlru, src_idx); - dst = list_lru_from_memcg_idx(nlru, dst_idx); + src = list_lru_from_memcg_idx(nlru, memcg->kmemcg_id); + dst = list_lru_from_memcg_idx(nlru, parent->kmemcg_id); list_splice_init(&src->list, &dst->list); if (src->nr_items) { dst->nr_items += src->nr_items; - set_shrinker_bit(dst_memcg, nid, lru_shrinker_id(lru)); + set_shrinker_bit(parent, nid, lru_shrinker_id(lru)); src->nr_items = 0; } spin_unlock_irq(&nlru->lock); } -static void memcg_drain_list_lru(struct list_lru *lru, - int src_idx, struct mem_cgroup *dst_memcg) +static void memcg_reparent_list_lru(struct list_lru *lru, + struct mem_cgroup *memcg, + struct mem_cgroup *parent) { int i; @@ -559,16 +560,16 @@ static void memcg_drain_list_lru(struct list_lru *lru, return; for_each_node(i) - memcg_drain_list_lru_node(lru, i, src_idx, dst_memcg); + memcg_reparent_list_lru_node(lru, i, memcg, parent); } -void memcg_drain_all_list_lrus(int src_idx, struct mem_cgroup *dst_memcg) +void memcg_reparent_list_lrus(struct mem_cgroup *memcg, struct mem_cgroup *parent) { struct list_lru *lru; mutex_lock(&list_lrus_mutex); list_for_each_entry(lru, &list_lrus, list) - memcg_drain_list_lru(lru, src_idx, dst_memcg); + memcg_reparent_list_lru(lru, memcg, parent); mutex_unlock(&list_lrus_mutex); } #else diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 21e12312509c..c1ce4fdba028 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3503,7 +3503,7 @@ static void memcg_offline_kmem(struct mem_cgroup *memcg) BUG_ON(kmemcg_id < 0); /* memcg_reparent_objcgs() must be called before this. */ - memcg_drain_all_list_lrus(kmemcg_id, parent); + memcg_reparent_list_lrus(memcg, parent); memcg_free_cache_id(kmemcg_id); } -- 2.11.0