Add paranoia to the page_alloc code to ensure we don't start page reclaim
during suspending.
Signed-off-by: Nigel Cunningham <[email protected]>
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]