quicklists: Only consider memory that can be used with GFP_KERNEL

From: Christoph Lameter
Date: Tue Jan 15 2008 - 13:51:19 EST


From: Christoph Lameter <clameter@xxxxxxx>

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 <clameter@xxxxxxx>
Tested-by: Dhaval Giani <dhaval@xxxxxxxxxxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>

---
mm/quicklist.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

--- a/mm/quicklist.c
+++ b/mm/quicklist.c
@@ -26,9 +26,17 @@ DEFINE_PER_CPU(struct quicklist, quickli
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);
}



On 2/6/08, Greg KH <greg@xxxxxxxxx> wrote:
> On Fri, Feb 01, 2008 at 05:30:14PM -0800, Christoph Lameter wrote:
> > On Fri, 1 Feb 2008, Justin M. Forbes wrote:
> >
> > >
> > > On Fri, 2008-02-01 at 16:39 -0800, Christoph Lameter wrote:
> > > > NO! Wrong fix. Was dropped from mainline.
> > >
> > > What is the right fix for the OOM issues with 2.6.22? Perhaps
> > > http://marc.info/?l=linux-mm&m=119973653803451&w=2 should be added to
> > > the queue in its place? The OOM issue in 2.6.22 is real, and should be
> > > addressed.
> >
> > Indeed that is the right fix.
>
> Can someone send it to me, in patch form so that I can apply it? Along
> with the git id of the same patch in mainline please, I can't seem to
> find it.
>
> thanks,
>
> greg k-h
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>


--
Thanks,
Oliver
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/