Currently, we get the vm_swappiness via vmscan_swappiness(), which calls global_reclaim() to check if this is a global reclaim. Besides, the current implementation of global_reclaim() always returns true for the !CONFIG_MEGCG case, and judges the other case by checking whether scan_control->target_mem_cgroup is null or not. Thus, we could just use two versions of vmscan_swappiness() based on MEMCG Kconfig , to eliminate the unnecessary run-time cost for the !CONFIG_MEMCG at all, and to squash all memcg-related checking into the CONFIG_MEMCG version. Signed-off-by: Zhan Jianyu <nasa4836@xxxxxxxxx> --- mm/memcontrol.c | 6 +++++- mm/vmscan.c | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index c5792a5..1290320 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1525,9 +1525,13 @@ static unsigned long mem_cgroup_margin(struct mem_cgroup *memcg) int mem_cgroup_swappiness(struct mem_cgroup *memcg) { - struct cgroup *cgrp = memcg->css.cgroup; + struct cgroup *cgrp; + + if (!memcg) + return vm_swappiness; /* root ? */ + cgrp = memcg->css.cgroup; if (cgrp->parent == NULL) return vm_swappiness; diff --git a/mm/vmscan.c b/mm/vmscan.c index 2cff0d4..1de652d 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1742,12 +1742,17 @@ static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan, return shrink_inactive_list(nr_to_scan, lruvec, sc, lru); } +#ifdef CONFIG_MEMCG static int vmscan_swappiness(struct scan_control *sc) { - if (global_reclaim(sc)) - return vm_swappiness; return mem_cgroup_swappiness(sc->target_mem_cgroup); } +#else +static int vmscan_swappiness(struct scan_control *sc) +{ + return vm_swappiness; +} +#endif enum scan_balance { SCAN_EQUAL, -- 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>