lkml.org 
[lkml]   [2006]   [Jun]   [27]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
FromNigel Cunningham <>
Subject[Suspend2][ 07/13] [Suspend2] Page_alloc paranoia.
DateTue, 27 Jun 2006 14:42:50 +1000
Add paranoia to the page_alloc code to ensure we don't start page reclaim
during suspending.

Signed-off-by: Nigel Cunningham <nigel@suspend2.net>

 mm/page_alloc.c |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 253a450..838ae19 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -25,6 +25,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/suspend.h>
+#include <linux/freezer.h>
 #include <linux/pagevec.h>
 #include <linux/blkdev.h>
 #include <linux/slab.h>
@@ -37,6 +38,7 @@
 #include <linux/nodemask.h>
 #include <linux/vmalloc.h>
 #include <linux/mempolicy.h>
+#include "../kernel/power/pageflags.h"
 
 #include <asm/tlbflush.h>
 #include <asm/div64.h>
@@ -905,7 +907,8 @@ get_page_from_freelist(gfp_t gfp_mask, u
 			else
 				mark = (*z)->pages_high;
 			if (!zone_watermark_ok(*z, order, mark,
-				    classzone_idx, alloc_flags))
+				    classzone_idx, alloc_flags) &&
+			    likely(!test_freezer_state(FREEZER_ON)))
 				if (!zone_reclaim_mode ||
 				    !zone_reclaim(*z, gfp_mask, order))
 					continue;
@@ -950,10 +953,12 @@ restart:
 	if (page)
 		goto got_pg;
 
-	do {
-		if (cpuset_zone_allowed(*z, gfp_mask|__GFP_HARDWALL))
-			wakeup_kswapd(*z, order);
-	} while (*(++z));
+	if (likely(!test_freezer_state(FREEZER_ON))) {
+		do {
+			if (cpuset_zone_allowed(*z, gfp_mask|__GFP_HARDWALL))
+				wakeup_kswapd(*z, order);
+		} while (*(++z));
+	}
 
 	/*
 	 * OK, we're below the kswapd watermark and have kicked background
@@ -997,6 +1002,7 @@ nofail_alloc:
 			if (page)
 				goto got_pg;
 			if (gfp_mask & __GFP_NOFAIL) {
+				BUG_ON(unlikely(test_freezer_state(FREEZING_COMPLETE)));
 				blk_congestion_wait(WRITE, HZ/50);
 				goto nofail_alloc;
 			}
@@ -1009,6 +1015,8 @@ nofail_alloc:
 		goto nopage;
 
 rebalance:
+	BUG_ON(unlikely(test_freezer_state(FREEZER_ON)));
+
 	cond_resched();
 
 	/* We now go into synchronous reclaim */
--
Nigel Cunningham		nigel at suspend2 dot net
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-06-27 06:46    [from the cache]
©2003-2008