mm: show message when updating min_free_kbytes in thp
authorHan Pingtian <[email protected]>
Thu, 23 Jan 2014 23:53:28 +0000 (15:53 -0800)
committerLinus Torvalds <[email protected]>
Fri, 24 Jan 2014 00:36:52 +0000 (16:36 -0800)
min_free_kbytes may be raised during THP's initialization.  Sometimes,
this will change the value which was set by the user.  Showing this
message will clarify this confusion.

Only show this message when changing a value which was set by the user
according to Michal Hocko's suggestion.

Show the old value of min_free_kbytes according to Dave Hansen's
suggestion.  This will give user the chance to restore old value of
min_free_kbytes.

Signed-off-by: Han Pingtian <[email protected]>
Reviewed-by: Michal Hocko <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: Dave Hansen <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
mm/huge_memory.c
mm/internal.h
mm/page_alloc.c

index 25fab7150fa0e10ab7d019174f7535b7afbcb541..afe73835837043bef11921e23ce4fa1512e87b96 100644 (file)
@@ -130,8 +130,14 @@ static int set_recommended_min_free_kbytes(void)
                              (unsigned long) nr_free_buffer_pages() / 20);
        recommended_min <<= (PAGE_SHIFT-10);
 
-       if (recommended_min > min_free_kbytes)
+       if (recommended_min > min_free_kbytes) {
+               if (user_min_free_kbytes >= 0)
+                       pr_info("raising min_free_kbytes from %d to %lu "
+                               "to help transparent hugepage allocations\n",
+                               min_free_kbytes, recommended_min);
+
                min_free_kbytes = recommended_min;
+       }
        setup_per_zone_wmarks();
        return 0;
 }
index dc95e979ae562167779f014cc54fe7fe322e7b12..7e145e8cd1e6ffadcd86ca0f2c2a30c7ac9ba027 100644 (file)
@@ -99,6 +99,7 @@ extern void prep_compound_page(struct page *page, unsigned long order);
 #ifdef CONFIG_MEMORY_FAILURE
 extern bool is_free_buddy_page(struct page *page);
 #endif
+extern int user_min_free_kbytes;
 
 #if defined CONFIG_COMPACTION || defined CONFIG_CMA
 
index a818d568ddf3a54c2e1a7250b671c5c0f77952f4..e3758a09a009747bd17cb75442d0fcae69a74cc4 100644 (file)
@@ -205,7 +205,7 @@ static char * const zone_names[MAX_NR_ZONES] = {
 };
 
 int min_free_kbytes = 1024;
-int user_min_free_kbytes;
+int user_min_free_kbytes = -1;
 
 static unsigned long __meminitdata nr_kernel_pages;
 static unsigned long __meminitdata nr_all_pages;