aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanne Huttunen <janne.huttunen@nokia.com>2018-11-16 18:08:32 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-11-18 13:15:10 -0500
commit13c9aaf7fa01cc7600c61981609feadeef3354ec (patch)
tree763c05ec919caab47f3147bdd6d1945094522a9c
parent78179556e7605ba07fd3ddba6ab8891fa457b93e (diff)
mm/vmstat.c: fix NUMA statistics updates
Scan through the whole array to see if an update is needed. While we're at it, use sizeof() to be safe against any possible type changes in the future. The bug here is that we wouldn't sync per-cpu counters into global ones if there was an update of numa_stats for higher cpus. Highly theoretical one though because it is much more probable that zone_stats are updated so we would refresh anyway. So I wouldn't bother to mark this for stable, yet something nice to fix. [mhocko@suse.com: changelog enhancement] Link: http://lkml.kernel.org/r/1541601517-17282-1-git-send-email-janne.huttunen@nokia.com Fixes: 1d90ca897cb0 ("mm: update NUMA counter threshold size") Signed-off-by: Janne Huttunen <janne.huttunen@nokia.com> Acked-by: Michal Hocko <mhocko@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/vmstat.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/mm/vmstat.c b/mm/vmstat.c
index 6038ce593ce3..9c624595e904 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -1827,12 +1827,13 @@ static bool need_update(int cpu)
1827 1827
1828 /* 1828 /*
1829 * The fast way of checking if there are any vmstat diffs. 1829 * The fast way of checking if there are any vmstat diffs.
1830 * This works because the diffs are byte sized items.
1831 */ 1830 */
1832 if (memchr_inv(p->vm_stat_diff, 0, NR_VM_ZONE_STAT_ITEMS)) 1831 if (memchr_inv(p->vm_stat_diff, 0, NR_VM_ZONE_STAT_ITEMS *
1832 sizeof(p->vm_stat_diff[0])))
1833 return true; 1833 return true;
1834#ifdef CONFIG_NUMA 1834#ifdef CONFIG_NUMA
1835 if (memchr_inv(p->vm_numa_stat_diff, 0, NR_VM_NUMA_STAT_ITEMS)) 1835 if (memchr_inv(p->vm_numa_stat_diff, 0, NR_VM_NUMA_STAT_ITEMS *
1836 sizeof(p->vm_numa_stat_diff[0])))
1836 return true; 1837 return true;
1837#endif 1838#endif
1838 } 1839 }