Re: [PATCH] mm: fix NUMA statistics updates

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[CC Andrew]

On Wed 07-11-18 16:38:37, Janne Huttunen wrote:
> 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.
> 
> Fixes: 1d90ca897cb0 ("mm: update NUMA counter threshold size")
> Signed-off-by: Janne Huttunen <janne.huttunen@xxxxxxxxx>

Acked-by: Michal Hocko <mhocko@xxxxxxxx>

Feel free to use the explanation below to answer what is the runtime
effect of the patch ;)

> ---
> Compile tested only! I don't know what error (if any) only scanning
> half of the array causes, so I cannot verify that this patch actually
> fixes it.

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.

Thanks

>  mm/vmstat.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/mm/vmstat.c b/mm/vmstat.c
> index 7878da7..eca984d 100644
> --- a/mm/vmstat.c
> +++ b/mm/vmstat.c
> @@ -1827,12 +1827,13 @@ static bool need_update(int cpu)
>  
>  		/*
>  		 * The fast way of checking if there are any vmstat diffs.
> -		 * This works because the diffs are byte sized items.
>  		 */
> -		if (memchr_inv(p->vm_stat_diff, 0, NR_VM_ZONE_STAT_ITEMS))
> +		if (memchr_inv(p->vm_stat_diff, 0, NR_VM_ZONE_STAT_ITEMS *
> +			       sizeof(p->vm_stat_diff[0])))
>  			return true;
>  #ifdef CONFIG_NUMA
> -		if (memchr_inv(p->vm_numa_stat_diff, 0, NR_VM_NUMA_STAT_ITEMS))
> +		if (memchr_inv(p->vm_numa_stat_diff, 0, NR_VM_NUMA_STAT_ITEMS *
> +			       sizeof(p->vm_numa_stat_diff[0])))
>  			return true;
>  #endif
>  	}
> -- 
> 2.5.5

-- 
Michal Hocko
SUSE Labs




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux