diff mbox series

[1/4] mm: restore node stat checking in /proc/sys/vm/stat_refresh

Message ID alpine.LSU.2.11.2102251502240.13363@eggly.anvils (mailing list archive)
State New, archived
Headers show
Series [1/4] mm: restore node stat checking in /proc/sys/vm/stat_refresh | expand

Commit Message

Hugh Dickins Feb. 25, 2021, 11:10 p.m. UTC
v4.7 52b6f46bc163 ("mm: /proc/sys/vm/stat_refresh to force vmstat update")
introduced vmstat_refresh(), with its vmstat underflow checking; then
v4.8 75ef71840539 ("mm, vmstat: add infrastructure for per-node vmstats")
split NR_VM_NODE_STAT_ITEMS out of NR_VM_ZONE_STAT_ITEMS without updating
vmstat_refresh(): so it has been missing out much of the vmstat underflow
checking ever since. Reinstate it. Thanks to Roman Gushchin <guro@fb.com>
for tangentially pointing this out.

Signed-off-by: Hugh Dickins <hughd@google.com>
---

 mm/vmstat.c |    8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Roman Gushchin March 1, 2021, 12:37 a.m. UTC | #1
On Thu, Feb 25, 2021 at 03:10:09PM -0800, Hugh Dickins wrote:
> v4.7 52b6f46bc163 ("mm: /proc/sys/vm/stat_refresh to force vmstat update")
> introduced vmstat_refresh(), with its vmstat underflow checking; then
> v4.8 75ef71840539 ("mm, vmstat: add infrastructure for per-node vmstats")
> split NR_VM_NODE_STAT_ITEMS out of NR_VM_ZONE_STAT_ITEMS without updating
> vmstat_refresh(): so it has been missing out much of the vmstat underflow
> checking ever since. Reinstate it. Thanks to Roman Gushchin <guro@fb.com>
> for tangentially pointing this out.
> 
> Signed-off-by: Hugh Dickins <hughd@google.com>

Acked-by: Roman Gushchin <guro@fb.com>

Thanks!

> ---
> 
>  mm/vmstat.c |    8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> --- 5.12-rc/mm/vmstat.c	2021-02-24 12:03:55.000000000 -0800
> +++ vmstat1/mm/vmstat.c	2021-02-25 11:50:36.000000000 -0800
> @@ -1857,6 +1857,14 @@ int vmstat_refresh(struct ctl_table *tab
>  		}
>  	}
>  #endif
> +	for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++) {
> +		val = atomic_long_read(&vm_node_stat[i]);
> +		if (val < 0) {
> +			pr_warn("%s: %s %ld\n",
> +				__func__, node_stat_name(i), val);
> +			err = -EINVAL;
> +		}
> +	}
>  	if (err)
>  		return err;
>  	if (write)
diff mbox series

Patch

--- 5.12-rc/mm/vmstat.c	2021-02-24 12:03:55.000000000 -0800
+++ vmstat1/mm/vmstat.c	2021-02-25 11:50:36.000000000 -0800
@@ -1857,6 +1857,14 @@  int vmstat_refresh(struct ctl_table *tab
 		}
 	}
 #endif
+	for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++) {
+		val = atomic_long_read(&vm_node_stat[i]);
+		if (val < 0) {
+			pr_warn("%s: %s %ld\n",
+				__func__, node_stat_name(i), val);
+			err = -EINVAL;
+		}
+	}
 	if (err)
 		return err;
 	if (write)