nodemask: reduce bitmap width to nr_node_ids in __nodemask_pr_numnodes()

__nodemask_pr_numnodes() currently returns MAX_NUMNODES as the field
width for '%*pb[l]' nodemask printing. MAX_NUMNODES is a compile-time
upper bound and can be much larger than the runtime node id range,
resulting in excessive zero padding in bitmap-form output.

For example, /proc/<pid>/status prints Mems_allowed with '%*pb' using
the nodemask_pr_args() helper. On systems built with MAX_NUMNODES=1024
but booted with a much smaller possible-node range, this produces:

  Mems_allowed: 00000000,00000000,...,00000003

Switch to nr_node_ids, matching the behavior of cpumask_pr_args() which
uses nr_cpu_ids. This reduces the output width from MAX_NUMNODES bits
to the runtime node id range:

  Mems_allowed: 3

Visible impact on in-tree users:
- Bitmap format ('%*pb') users:
  * /proc/<pid>/status Mems_allowed (format changes as shown above)

- List format ('%*pbl') users, output is unchanged, as list formatter
  only prints set bit ranges:
  * /sys/devices/system/node/{possible,online,has_normal_memory, ...}
  * NVMe multipath sysfs numa_nodes
  * memory tier sysfs nodelist
  * cpuset cgroup mems and effective_mems files
  * /proc/<pid>/status Mems_allowed_list
  * mempolicy strings in /proc/<pid>/numa_maps
  * SLUB debugfs output
  * Kernel log messages printing nodemasks

Move nr_node_ids and nr_online_nodes declarations earlier in the file
to allow __nodemask_pr_numnodes() to use nr_node_ids.

Cc: Yury Norov <yury.norov@gmail.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-mm@kvack.org
Signed-off-by: Li RongQing <lirongqing@baidu.com>
Signed-off-by: Yury Norov <ynorov@nvidia.com>
This commit is contained in:
Li RongQing 2026-07-13 15:51:04 +08:00 • committed by Yury Norov
commit c4f392a35c