From fcae8056673aa7b5b55d669fe5255ae76a93ae53 Mon Sep 17 00:00:00 2001
 From: Christoph Lameter <[EMAIL PROTECTED]>
 Date: Wed, 16 Jan 2008 00:21:19 +0530
 Subject: [PATCH] quicklists: Only consider memory that can be used
 with GFP_KERNEL
 
 patch 96990a4ae979df9e235d01097d6175759331e88c in mainline.
 
 Quicklists calculates the size of the quicklists based on the number of
 free pages.  This must be the number of free pages that can be allocated
 with GFP_KERNEL.  node_page_state() includes the pages in ZONE_HIGHMEM and
 ZONE_MOVABLE which may lead the quicklists to become too large causing OOM.
 
 Signed-off-by: Christoph Lameter <[EMAIL PROTECTED]>
 Tested-by: Dhaval Giani <[EMAIL PROTECTED]>
 Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
 Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
 Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
 Signed-off-by: Oliver Pinter <[EMAIL PROTECTED]>
 
 diff --git a/mm/quicklist.c b/mm/quicklist.c
 index ae8189c..3f703f7 100644
 --- a/mm/quicklist.c
 +++ b/mm/quicklist.c
 @@ -26,9 +26,17 @@ DEFINE_PER_CPU(struct quicklist,
 quicklist)[CONFIG_NR_QUICK];
  static unsigned long max_pages(unsigned long min_pages)
  {
        unsigned long node_free_pages, max;
 +      struct zone *zones = NODE_DATA(numa_node_id())->node_zones;
 +
 +      node_free_pages =
 +#ifdef CONFIG_ZONE_DMA
 +              zone_page_state(&zones[ZONE_DMA], NR_FREE_PAGES) +
 +#endif
 +#ifdef CONFIG_ZONE_DMA32
 +              zone_page_state(&zones[ZONE_DMA32], NR_FREE_PAGES) +
 +#endif
 +              zone_page_state(&zones[ZONE_NORMAL], NR_FREE_PAGES);
 
 -      node_free_pages = node_page_state(numa_node_id(),
 -                      NR_FREE_PAGES);
        max = node_free_pages / FRACTION_OF_NODE_MEM;
        return max(max, min_pages);
  }
 
 
 -- 
 Thanks,
 Oliver
--
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/

Reply via email to