Messages in this thread |  | | | Date | Tue, 27 Jun 2006 16:11:52 +1000 | | From | Nick Piggin <> | | Subject | Re: [Suspend2][ 07/13] [Suspend2] Page_alloc paranoia. |
| |
Nigel Cunningham wrote: > Add paranoia to the page_alloc code to ensure we don't start page reclaim > during suspending. >
Nack. Set PF_MEMALLOC if you must.
> 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
-- SUSE Labs, Novell Inc. Send instant messages to your online friends http://au.messenger.yahoo.com
- 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/
|  |