Thread (4 messages) 4 messages, 2 authors, 2002-09-26

Re: free_more_memory() calls try_to_free_pages() with a NULL classzone

From: Martin J. Bligh <hidden>
Date: 2002-09-19 05:07:42

mbligh:
quoted
wli:
I'm not convinced contig_page_data is supposed to even be defined.
It's not. Thus this:

zone = contig_page_data.node_zonelists[GFP_NOFS&GFP_ZONEMASK].zones[0];

should have been caught at compile time.
OK, here's more or less your fix as a patch (one typo fixed)
plus the undef of contig_page_data for discontigmem.
You don't need to check the zone size, that gets done when the
zonelist is built.

Can you put it through the wli snot-kicking test?
Compiles and boots (well, if you apply the other patch I sent
earlier first).

Thanks,

M.

diff -urN -X /home/mbligh/.diff.exclude numafixes/fs/buffer.c numafixes2/fs/buffer.c
--- numafixes/fs/buffer.c	Wed Sep 18 20:41:12 2002
+++ numafixes2/fs/buffer.c	Wed Sep 18 21:41:05 2002
@@ -468,12 +468,17 @@
 static void free_more_memory(void)
 {
 	struct zone *zone;
+	pg_data_t *pgdat;
 
-	zone = contig_page_data.node_zonelists[GFP_NOFS&GFP_ZONEMASK].zones[0];
 	wakeup_bdflush(1024);
 	blk_run_queues();
 	yield();
-	try_to_free_pages(zone, GFP_NOFS, 0);
+
+	for_each_pgdat(pgdat) {
+		zone = pgdat->node_zonelists[GFP_NOFS&GFP_ZONEMASK].zones[0];
+		if (zone)
+			try_to_free_pages(zone, GFP_NOFS, 0);
+	}
 }
 
 /*
diff -urN -X /home/mbligh/.diff.exclude numafixes/mm/bootmem.c numafixes2/mm/bootmem.c
--- numafixes/mm/bootmem.c	Tue Sep 17 17:58:50
2002
+++ numafixes2/mm/bootmem.c	Wed Sep 18 21:44:16 2002
@@ -311,6 +311,7 @@
 	return(free_all_bootmem_core(pgdat));
 }
 
+#ifndef CONFIG_DISCONTIGMEM
 unsigned long __init init_bootmem (unsigned long start, unsigned long pages)
 {
 	max_low_pfn = pages;
@@ -334,6 +335,7 @@
 {
 	return(free_all_bootmem_core(&contig_page_data));
 }
+#endif /* !CONFIG_DISCONTIGMEM */
 
 void * __init __alloc_bootmem (unsigned long size, unsigned long align, unsigned long goal)
 {
diff -urN -X /home/mbligh/.diff.exclude numafixes/mm/numa.c numafixes2/mm/numa.c
--- numafixes/mm/numa.c	Wed Sep 18 20:41:12 2002
+++ numafixes2/mm/numa.c	Wed Sep 18 21:41:05 2002
@@ -11,10 +11,10 @@
 
 int numnodes = 1;	/* Initialized for UMA platforms */
 
+#ifndef CONFIG_DISCONTIGMEM
+
static bootmem_data_t contig_bootmem_data;
 pg_data_t contig_page_data = { .bdata = &contig_bootmem_data };
-
-#ifndef CONFIG_DISCONTIGMEM
 
 /*
  * This is meant to be invoked by platforms whose physical memory starts

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help