since commit 031bc5743f158 ("mm/debug-pagealloc: make debug-pagealloc
boottime configurable") CONFIG_DEBUG_PAGEALLOC is by default a no-op.

This resulted in several unnoticed bugs, e.g.
https://lkml.kernel.org/g/<[email protected]>
or
https://lkml.kernel.org/g/<[email protected]>

as this behaviour change was not even documented in Kconfig.

Let's go back to the original default and reverse the command
line parameter to allow disabling the feature.

Cc: Joonsoo Kim <[email protected]>
Signed-off-by: Christian Borntraeger <[email protected]>
---
 Documentation/kernel-parameters.txt | 8 ++++----
 mm/Kconfig.debug                    | 2 ++
 mm/page_alloc.c                     | 6 +++---
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/Documentation/kernel-parameters.txt 
b/Documentation/kernel-parameters.txt
index 742f69d..7553c87 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -854,13 +854,13 @@ bytes respectively. Such letter suffixes can also be 
entirely omitted.
                        tracking down these problems.
 
        debug_pagealloc=
-                       [KNL] When CONFIG_DEBUG_PAGEALLOC is set, this
-                       parameter enables the feature at boot time. In
-                       default, it is disabled. We can avoid allocating huge
+                       [KNL] When CONFIG_DEBUG_PAGEALLOC is set to off, this
+                       parameter disables the feature at boot time. In
+                       default, it is enabled. We can avoid allocating huge
                        chunk of memory for debug pagealloc if we don't enable
                        it at boot time and the system will work mostly same
                        with the kernel built without CONFIG_DEBUG_PAGEALLOC.
-                       on: enable the feature
+                       off: disable the feature
 
        debugpat        [X86] Enable PAT debugging
 
diff --git a/mm/Kconfig.debug b/mm/Kconfig.debug
index 957d3da..3f991a4 100644
--- a/mm/Kconfig.debug
+++ b/mm/Kconfig.debug
@@ -25,6 +25,8 @@ config DEBUG_PAGEALLOC
          this option cannot be enabled in combination with hibernation as
          that would result in incorrect warnings of memory corruption after
          a resume because free pages are not saved to the suspend image.
+         The feature can be disable with the kernel parameter
+         debug_pagealloc=off.
 
 config PAGE_POISONING
        bool
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 9d666df..8a03efd 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -479,7 +479,7 @@ void prep_compound_page(struct page *page, unsigned int 
order)
 
 #ifdef CONFIG_DEBUG_PAGEALLOC
 unsigned int _debug_guardpage_minorder;
-bool _debug_pagealloc_enabled __read_mostly;
+bool _debug_pagealloc_enabled __read_mostly = true;
 bool _debug_guardpage_enabled __read_mostly;
 
 static int __init early_debug_pagealloc(char *buf)
@@ -487,8 +487,8 @@ static int __init early_debug_pagealloc(char *buf)
        if (!buf)
                return -EINVAL;
 
-       if (strcmp(buf, "on") == 0)
-               _debug_pagealloc_enabled = true;
+       if (strcmp(buf, "off") == 0)
+               _debug_pagealloc_enabled = false;
 
        return 0;
 }
-- 
2.3.0

Reply via email to