On 4/9/19 7:05 PM, Konstantin Khlebnikov wrote: > From: Roman Gushchin <guro@xxxxxx> > > [ commit c29f9010a35604047f96a7e9d6cbabfa36d996d1 from 4.14.y ] > > Yongqin reported that /proc/zoneinfo format is broken in 4.14 > due to commit 7aaf77272358 ("mm: don't show nr_indirectly_reclaimable > in /proc/vmstat") > > Node 0, zone DMA > per-node stats > nr_inactive_anon 403 > nr_active_anon 89123 > nr_inactive_file 128887 > nr_active_file 47377 > nr_unevictable 2053 > nr_slab_reclaimable 7510 > nr_slab_unreclaimable 10775 > nr_isolated_anon 0 > nr_isolated_file 0 > <...> > nr_vmscan_write 0 > nr_vmscan_immediate_reclaim 0 > nr_dirtied 6022 > nr_written 5985 > 74240 > ^^^^^^^^^^ > pages free 131656 > > The problem is caused by the nr_indirectly_reclaimable counter, > which is hidden from the /proc/vmstat, but not from the > /proc/zoneinfo. Let's fix this inconsistency and hide the > counter from /proc/zoneinfo exactly as from /proc/vmstat. > > BTW, in 4.19+ the counter has been renamed and exported by This was actually 4.20+ and this mistake is why we initially forgot about 4.19 stable in [1] [1] https://lore.kernel.org/linux-mm/20181030174649.16778-1-guro@xxxxxx/ > the commit b29940c1abd7 ("mm: rename and change semantics of > nr_indirectly_reclaimable_bytes"), so there is no such a problem > anymore. > > Cc: <stable@xxxxxxxxxxxxxxx> # 4.19.y > Fixes: 7aaf77272358 ("mm: don't show nr_indirectly_reclaimable in /proc/vmstat") > Reported-by: Yongqin Liu <yongqin.liu@xxxxxxxxxx> > Signed-off-by: Roman Gushchin <guro@xxxxxx> > Cc: Vlastimil Babka <vbabka@xxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Signed-off-by: Konstantin Khlebnikov <khlebnikov@xxxxxxxxxxxxxx> Thanks. > --- > mm/vmstat.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/mm/vmstat.c b/mm/vmstat.c > index 72ef3936d15d..7b8937cb2876 100644 > --- a/mm/vmstat.c > +++ b/mm/vmstat.c > @@ -1550,6 +1550,10 @@ static void zoneinfo_show_print(struct seq_file *m, pg_data_t *pgdat, > if (is_zone_first_populated(pgdat, zone)) { > seq_printf(m, "\n per-node stats"); > for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++) { > + /* Skip hidden vmstat items. */ > + if (*vmstat_text[i + NR_VM_ZONE_STAT_ITEMS + > + NR_VM_NUMA_STAT_ITEMS] == '\0') > + continue; > seq_printf(m, "\n %-12s %lu", > vmstat_text[i + NR_VM_ZONE_STAT_ITEMS + > NR_VM_NUMA_STAT_ITEMS], >