... if it is incorrect.

(A temporary hack, to be dropped after the rebase on top of RHEL 8.4.)

vcmmd expects the total amount of RAM for a NUMA node shown in
cat /sys/devices/system/node/node*/meminfo to be no less than
amount_of_free_RAM + amount_of_reclaimable_memory.

The hack from 28c689b8581f ("mm/page_alloc: Adjust the number of
managed pages for a zone if it is wrong") did not take reclaimable
memory into account. This is another hack to fix it up.

The patch was prepared in the scope of
https://jira.sw.ru/browse/PSBM-129304.

The problem seems to be fixed in the kernel from RHEL 8.4, so the patch
should be dropped after rebase on top of that kernel.

Signed-off-by: Evgenii Shatokhin <[email protected]>
---
 drivers/base/node.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/base/node.c b/drivers/base/node.c
index d75862546c4e..0c69b32d300e 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -365,10 +365,21 @@ static ssize_t node_read_meminfo(struct device *dev,
        struct pglist_data *pgdat = NODE_DATA(nid);
        struct sysinfo i;
        unsigned long sreclaimable, sunreclaimable;
+       unsigned long totalram;
+       unsigned long kreclaimable;
+       unsigned long usableram;
 
        si_meminfo_node(&i, nid);
        sreclaimable = node_page_state(pgdat, NR_SLAB_RECLAIMABLE);
        sunreclaimable = node_page_state(pgdat, NR_SLAB_UNRECLAIMABLE);
+       totalram = i.totalram;
+       kreclaimable = sreclaimable + node_page_state(pgdat,
+                                                     
NR_KERNEL_MISC_RECLAIMABLE);
+       /* HACK, PSBM-129304 */
+       usableram = i.freeram + kreclaimable;
+       if (totalram < usableram)
+               totalram = usableram;
+
        n = sprintf(buf,
                       "Node %d MemTotal:       %8lu kB\n"
                       "Node %d MemFree:        %8lu kB\n"
@@ -381,7 +392,7 @@ static ssize_t node_read_meminfo(struct device *dev,
                       "Node %d Inactive(file): %8lu kB\n"
                       "Node %d Unevictable:    %8lu kB\n"
                       "Node %d Mlocked:        %8lu kB\n",
-                      nid, K(i.totalram),
+                      nid, K(totalram),
                       nid, K(i.freeram),
                       nid, K(i.totalram - i.freeram),
                       nid, K(node_page_state(pgdat, NR_ACTIVE_ANON) +
@@ -439,8 +450,7 @@ static ssize_t node_read_meminfo(struct device *dev,
                       nid, K(node_page_state(pgdat, NR_UNSTABLE_NFS)),
                       nid, K(sum_zone_node_page_state(nid, NR_BOUNCE)),
                       nid, K(node_page_state(pgdat, NR_WRITEBACK_TEMP)),
-                      nid, K(sreclaimable +
-                             node_page_state(pgdat, 
NR_KERNEL_MISC_RECLAIMABLE)),
+                      nid, K(kreclaimable),
                       nid, K(sreclaimable + sunreclaimable),
                       nid, K(sreclaimable),
                       nid, K(sunreclaimable)
-- 
2.29.0

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to