From: Andrey Ryabinin <[email protected]>

On a machine with a lot of cpus, the sd_alloc_entry() can
trigger a high order allocation, which is slow and may fail
if memory fragmentation is high. Use kvzalloc to fallback
0-order allocations if high-order isn't available.

Signed-off-by: Andrey Ryabinin <[email protected]>
(cherry picked from commit 6a6935993911cfc6798566c8827da0e39a08aff8)

VZ 8 rebase part https://jira.sw.ru/browse/PSBM-127837

Signed-off-by: Alexander Mikhalitsyn <[email protected]>
---
 kernel/sched/debug.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index dd5a97b7c7d8..93d13a33f704 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -210,7 +210,7 @@ static struct ctl_table sd_ctl_root[] = {
 static struct ctl_table *sd_alloc_ctl_entry(int n)
 {
        struct ctl_table *entry =
-               kcalloc(n, sizeof(struct ctl_table), GFP_KERNEL);
+               kvzalloc(n * sizeof(struct ctl_table), GFP_KERNEL);
 
        return entry;
 }
@@ -232,7 +232,7 @@ static void sd_free_ctl_entry(struct ctl_table **tablep)
                        kfree(entry->procname);
        }
 
-       kfree(*tablep);
+       kvfree(*tablep);
        *tablep = NULL;
 }
 
-- 
2.28.0

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

Reply via email to