Messages in this thread Patch in this message |  | | | From | Nigel Cunningham <> | | Subject | [Suspend2][ 07/13] [Suspend2] Page_alloc paranoia. | | Date | Tue, 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/
|  |