Hongyu noticed that the nr_unaccepted counter kept growing even in the absence of unaccepted memory on the machine.
This happens due to a commit that removed NR_BOUNCE: it removed the counter from the enum zone_stat_item, but left it in the vmstat_text array.
As a result, all counters below nr_bounce in /proc/vmstat are shifted by one line, causing the numa_hit counter to be labeled as nr_unaccepted.
To fix this issue, remove nr_bounce from the vmstat_text array.
Signed-off-by: Kirill A. Shutemov kirill.shutemov@linux.intel.com Reported-by: Hongyu Ning hongyu.ning@linux.intel.com Fixes: 194df9f66db8 ("mm: remove NR_BOUNCE zone stat") Cc: stable@vger.kernel.org Cc: Christoph Hellwig hch@lst.de Cc: Hannes Reinecke hare@suse.de Cc: Johannes Thumshirn johannes.thumshirn@wdc.com Cc: Jens Axboe axboe@kernel.dk --- mm/vmstat.c | 1 - 1 file changed, 1 deletion(-)
diff --git a/mm/vmstat.c b/mm/vmstat.c index 4c268ce39ff2..ae9882063d89 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1201,7 +1201,6 @@ const char * const vmstat_text[] = { "nr_zone_unevictable", "nr_zone_write_pending", "nr_mlock", - "nr_bounce", #if IS_ENABLED(CONFIG_ZSMALLOC) "nr_zspages", #endif
On 5/29/25 12:38, Kirill A. Shutemov wrote:
Hongyu noticed that the nr_unaccepted counter kept growing even in the absence of unaccepted memory on the machine.
This happens due to a commit that removed NR_BOUNCE: it removed the counter from the enum zone_stat_item, but left it in the vmstat_text array.
As a result, all counters below nr_bounce in /proc/vmstat are shifted by one line, causing the numa_hit counter to be labeled as nr_unaccepted.
To fix this issue, remove nr_bounce from the vmstat_text array.
Signed-off-by: Kirill A. Shutemov kirill.shutemov@linux.intel.com Reported-by: Hongyu Ning hongyu.ning@linux.intel.com Fixes: 194df9f66db8 ("mm: remove NR_BOUNCE zone stat") Cc: stable@vger.kernel.org Cc: Christoph Hellwig hch@lst.de Cc: Hannes Reinecke hare@suse.de Cc: Johannes Thumshirn johannes.thumshirn@wdc.com Cc: Jens Axboe axboe@kernel.dk
Is there a way to add a BUILD_BUG_ON to catch a future case like this one?
mm/vmstat.c | 1 - 1 file changed, 1 deletion(-)
diff --git a/mm/vmstat.c b/mm/vmstat.c index 4c268ce39ff2..ae9882063d89 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1201,7 +1201,6 @@ const char * const vmstat_text[] = { "nr_zone_unevictable", "nr_zone_write_pending", "nr_mlock",
- "nr_bounce",
#if IS_ENABLED(CONFIG_ZSMALLOC) "nr_zspages", #endif
On Thu, May 29, 2025 at 12:40:21PM +0200, Vlastimil Babka wrote:
On 5/29/25 12:38, Kirill A. Shutemov wrote:
Hongyu noticed that the nr_unaccepted counter kept growing even in the absence of unaccepted memory on the machine.
This happens due to a commit that removed NR_BOUNCE: it removed the counter from the enum zone_stat_item, but left it in the vmstat_text array.
As a result, all counters below nr_bounce in /proc/vmstat are shifted by one line, causing the numa_hit counter to be labeled as nr_unaccepted.
To fix this issue, remove nr_bounce from the vmstat_text array.
Signed-off-by: Kirill A. Shutemov kirill.shutemov@linux.intel.com Reported-by: Hongyu Ning hongyu.ning@linux.intel.com Fixes: 194df9f66db8 ("mm: remove NR_BOUNCE zone stat") Cc: stable@vger.kernel.org Cc: Christoph Hellwig hch@lst.de Cc: Hannes Reinecke hare@suse.de Cc: Johannes Thumshirn johannes.thumshirn@wdc.com Cc: Jens Axboe axboe@kernel.dk
Is there a way to add a BUILD_BUG_ON to catch a future case like this one?
There's
BUILD_BUG_ON(ARRAY_SIZE(vmstat_text) < NR_VMSTAT_ITEMS);
in vmstat_start().
Making it strict != seems to do the trick for my config. But it requires wider testing.
I can prepare a patch for that.
On Thu, May 29, 2025 at 01:47:10PM +0300, Kirill A. Shutemov wrote:
On Thu, May 29, 2025 at 12:40:21PM +0200, Vlastimil Babka wrote:
On 5/29/25 12:38, Kirill A. Shutemov wrote:
Hongyu noticed that the nr_unaccepted counter kept growing even in the absence of unaccepted memory on the machine.
This happens due to a commit that removed NR_BOUNCE: it removed the counter from the enum zone_stat_item, but left it in the vmstat_text array.
As a result, all counters below nr_bounce in /proc/vmstat are shifted by one line, causing the numa_hit counter to be labeled as nr_unaccepted.
To fix this issue, remove nr_bounce from the vmstat_text array.
Signed-off-by: Kirill A. Shutemov kirill.shutemov@linux.intel.com Reported-by: Hongyu Ning hongyu.ning@linux.intel.com Fixes: 194df9f66db8 ("mm: remove NR_BOUNCE zone stat") Cc: stable@vger.kernel.org Cc: Christoph Hellwig hch@lst.de Cc: Hannes Reinecke hare@suse.de Cc: Johannes Thumshirn johannes.thumshirn@wdc.com Cc: Jens Axboe axboe@kernel.dk
Is there a way to add a BUILD_BUG_ON to catch a future case like this one?
There's
BUILD_BUG_ON(ARRAY_SIZE(vmstat_text) < NR_VMSTAT_ITEMS);
in vmstat_start().
Making it strict != seems to do the trick for my config. But it requires wider testing.
I can prepare a patch for that.
There was a strict check before 9d7ea9a297e6 ("mm/vmstat: add helpers to get vmstat item names for each enum type"). Not sure if changing != to < was intentional.
Konstantin?
On Thu, 29 May 2025 at 12:51, Kirill A. Shutemov kirill.shutemov@linux.intel.com wrote:
On Thu, May 29, 2025 at 01:47:10PM +0300, Kirill A. Shutemov wrote:
On Thu, May 29, 2025 at 12:40:21PM +0200, Vlastimil Babka wrote:
On 5/29/25 12:38, Kirill A. Shutemov wrote:
Hongyu noticed that the nr_unaccepted counter kept growing even in the absence of unaccepted memory on the machine.
This happens due to a commit that removed NR_BOUNCE: it removed the counter from the enum zone_stat_item, but left it in the vmstat_text array.
As a result, all counters below nr_bounce in /proc/vmstat are shifted by one line, causing the numa_hit counter to be labeled as nr_unaccepted.
To fix this issue, remove nr_bounce from the vmstat_text array.
Signed-off-by: Kirill A. Shutemov kirill.shutemov@linux.intel.com Reported-by: Hongyu Ning hongyu.ning@linux.intel.com Fixes: 194df9f66db8 ("mm: remove NR_BOUNCE zone stat") Cc: stable@vger.kernel.org Cc: Christoph Hellwig hch@lst.de Cc: Hannes Reinecke hare@suse.de Cc: Johannes Thumshirn johannes.thumshirn@wdc.com Cc: Jens Axboe axboe@kernel.dk
Is there a way to add a BUILD_BUG_ON to catch a future case like this one?
There's
BUILD_BUG_ON(ARRAY_SIZE(vmstat_text) < NR_VMSTAT_ITEMS);
in vmstat_start().
Making it strict != seems to do the trick for my config. But it requires wider testing.
I can prepare a patch for that.
There was a strict check before 9d7ea9a297e6 ("mm/vmstat: add helpers to get vmstat item names for each enum type"). Not sure if changing != to < was intentional.
Konstantin?
I have no clue. Sorry.
-- Kiryl Shutsemau / Kirill A. Shutemov
On 5/29/25 4:38 AM, Kirill A. Shutemov wrote:
Hongyu noticed that the nr_unaccepted counter kept growing even in the absence of unaccepted memory on the machine.
This happens due to a commit that removed NR_BOUNCE: it removed the counter from the enum zone_stat_item, but left it in the vmstat_text array.
As a result, all counters below nr_bounce in /proc/vmstat are shifted by one line, causing the numa_hit counter to be labeled as nr_unaccepted.
To fix this issue, remove nr_bounce from the vmstat_text array.
Reviewed-by: Jens Axboe axboe@kernel.dk
Cc: stable@vger.kernel.org
No need for a stable tag, the patch went into the 6.16 merge window.
Hi Kirill,
kernel test robot noticed the following build errors:
[auto build test ERROR on akpm-mm/mm-everything]
url: https://github.com/intel-lab-lkp/linux/commits/Kirill-A-Shutemov/mm-Fix-vmst... base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20250529103832.2937460-1-kirill.shutemov%40linux.i... patch subject: [PATCH] mm: Fix vmstat after removing NR_BOUNCE config: m68k-allnoconfig (https://download.01.org/0day-ci/archive/20250529/202505291930.NDyeQ06g-lkp@i...) compiler: m68k-linux-gcc (GCC) 15.1.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250529/202505291930.NDyeQ06g-lkp@i...)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot lkp@intel.com | Closes: https://lore.kernel.org/oe-kbuild-all/202505291930.NDyeQ06g-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from <command-line>: mm/vmstat.c: In function 'vmstat_start':
include/linux/compiler_types.h:563:45: error: call to '__compiletime_assert_318' declared with attribute error: BUILD_BUG_ON failed: ARRAY_SIZE(vmstat_text) < NR_VMSTAT_ITEMS
563 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^ include/linux/compiler_types.h:544:25: note: in definition of macro '__compiletime_assert' 544 | prefix ## suffix(); \ | ^~~~~~ include/linux/compiler_types.h:563:9: note: in expansion of macro '_compiletime_assert' 563 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert' 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) | ^~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG' 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition) | ^~~~~~~~~~~~~~~~ mm/vmstat.c:1872:9: note: in expansion of macro 'BUILD_BUG_ON' 1872 | BUILD_BUG_ON(ARRAY_SIZE(vmstat_text) < NR_VMSTAT_ITEMS); | ^~~~~~~~~~~~
vim +/__compiletime_assert_318 +563 include/linux/compiler_types.h
eb5c2d4b45e3d2 Will Deacon 2020-07-21 549 eb5c2d4b45e3d2 Will Deacon 2020-07-21 550 #define _compiletime_assert(condition, msg, prefix, suffix) \ eb5c2d4b45e3d2 Will Deacon 2020-07-21 551 __compiletime_assert(condition, msg, prefix, suffix) eb5c2d4b45e3d2 Will Deacon 2020-07-21 552 eb5c2d4b45e3d2 Will Deacon 2020-07-21 553 /** eb5c2d4b45e3d2 Will Deacon 2020-07-21 554 * compiletime_assert - break build and emit msg if condition is false eb5c2d4b45e3d2 Will Deacon 2020-07-21 555 * @condition: a compile-time constant condition to check eb5c2d4b45e3d2 Will Deacon 2020-07-21 556 * @msg: a message to emit if condition is false eb5c2d4b45e3d2 Will Deacon 2020-07-21 557 * eb5c2d4b45e3d2 Will Deacon 2020-07-21 558 * In tradition of POSIX assert, this macro will break the build if the eb5c2d4b45e3d2 Will Deacon 2020-07-21 559 * supplied condition is *false*, emitting the supplied error message if the eb5c2d4b45e3d2 Will Deacon 2020-07-21 560 * compiler has support to do so. eb5c2d4b45e3d2 Will Deacon 2020-07-21 561 */ eb5c2d4b45e3d2 Will Deacon 2020-07-21 562 #define compiletime_assert(condition, msg) \ eb5c2d4b45e3d2 Will Deacon 2020-07-21 @563 _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) eb5c2d4b45e3d2 Will Deacon 2020-07-21 564
On Thu, May 29, 2025 at 07:59:40PM +0800, kernel test robot wrote:
Hi Kirill,
kernel test robot noticed the following build errors:
[auto build test ERROR on akpm-mm/mm-everything]
url: https://github.com/intel-lab-lkp/linux/commits/Kirill-A-Shutemov/mm-Fix-vmst... base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
Wrong base. Use Linus' tree instead.
On 5/29/25 12:38, Kirill A. Shutemov wrote:
Hongyu noticed that the nr_unaccepted counter kept growing even in the absence of unaccepted memory on the machine.
This happens due to a commit that removed NR_BOUNCE: it removed the counter from the enum zone_stat_item, but left it in the vmstat_text array.
As a result, all counters below nr_bounce in /proc/vmstat are shifted by one line, causing the numa_hit counter to be labeled as nr_unaccepted.
To fix this issue, remove nr_bounce from the vmstat_text array.
Signed-off-by: Kirill A. Shutemov kirill.shutemov@linux.intel.com Reported-by: Hongyu Ning hongyu.ning@linux.intel.com Fixes: 194df9f66db8 ("mm: remove NR_BOUNCE zone stat") Cc: stable@vger.kernel.org
Not necessary, as the fixes commit is from this merge window?
Cc: Christoph Hellwig hch@lst.de Cc: Hannes Reinecke hare@suse.de Cc: Johannes Thumshirn johannes.thumshirn@wdc.com Cc: Jens Axboe axboe@kernel.dk
Reviewed-by: Vlastimil Babka vbabka@suse.cz
mm/vmstat.c | 1 - 1 file changed, 1 deletion(-)
diff --git a/mm/vmstat.c b/mm/vmstat.c index 4c268ce39ff2..ae9882063d89 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1201,7 +1201,6 @@ const char * const vmstat_text[] = { "nr_zone_unevictable", "nr_zone_write_pending", "nr_mlock",
- "nr_bounce",
#if IS_ENABLED(CONFIG_ZSMALLOC) "nr_zspages", #endif
On Thu 29-05-25 13:38:32, Kirill A. Shutemov wrote:
Hongyu noticed that the nr_unaccepted counter kept growing even in the absence of unaccepted memory on the machine.
This happens due to a commit that removed NR_BOUNCE: it removed the counter from the enum zone_stat_item, but left it in the vmstat_text array.
As a result, all counters below nr_bounce in /proc/vmstat are shifted by one line, causing the numa_hit counter to be labeled as nr_unaccepted.
To fix this issue, remove nr_bounce from the vmstat_text array.
Signed-off-by: Kirill A. Shutemov kirill.shutemov@linux.intel.com Reported-by: Hongyu Ning hongyu.ning@linux.intel.com Fixes: 194df9f66db8 ("mm: remove NR_BOUNCE zone stat") Cc: stable@vger.kernel.org Cc: Christoph Hellwig hch@lst.de Cc: Hannes Reinecke hare@suse.de Cc: Johannes Thumshirn johannes.thumshirn@wdc.com Cc: Jens Axboe axboe@kernel.dk
Acked-by: Michal Hocko mhocko@suse.com Unfortunatelly a common mistake to make. I have seen you have a followup fix with a stricter build time check. Will have a look.
Thanks!
mm/vmstat.c | 1 - 1 file changed, 1 deletion(-)
diff --git a/mm/vmstat.c b/mm/vmstat.c index 4c268ce39ff2..ae9882063d89 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1201,7 +1201,6 @@ const char * const vmstat_text[] = { "nr_zone_unevictable", "nr_zone_write_pending", "nr_mlock",
- "nr_bounce",
#if IS_ENABLED(CONFIG_ZSMALLOC) "nr_zspages",
#endif
2.47.2
On Thu, May 29, 2025 at 01:38:32PM +0300, Kirill A. Shutemov wrote:
Hongyu noticed that the nr_unaccepted counter kept growing even in the absence of unaccepted memory on the machine.
This happens due to a commit that removed NR_BOUNCE: it removed the counter from the enum zone_stat_item, but left it in the vmstat_text array.
As a result, all counters below nr_bounce in /proc/vmstat are shifted by one line, causing the numa_hit counter to be labeled as nr_unaccepted.
To fix this issue, remove nr_bounce from the vmstat_text array.
Signed-off-by: Kirill A. Shutemov kirill.shutemov@linux.intel.com Reported-by: Hongyu Ning hongyu.ning@linux.intel.com Fixes: 194df9f66db8 ("mm: remove NR_BOUNCE zone stat") Cc: stable@vger.kernel.org Cc: Christoph Hellwig hch@lst.de Cc: Hannes Reinecke hare@suse.de Cc: Johannes Thumshirn johannes.thumshirn@wdc.com Cc: Jens Axboe axboe@kernel.dk
Reviewed-by: Shakeel Butt shakeel.butt@linux.dev
Can we put BUILD_BUG_ON() to avoid this situation in the future?
linux-stable-mirror@lists.linaro.org