--- /dev/null
+From 1125b4e3949949b44a7c80b619507c6f61d62911 Mon Sep 17 00:00:00 2001
+From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
+Date: Sat, 18 Oct 2008 20:27:11 -0700
+Subject: setup_per_zone_pages_min(): take zone->lock instead of zone->lru_lock
+
+From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
+
+commit 1125b4e3949949b44a7c80b619507c6f61d62911 upstream.
+
+This replaces zone->lru_lock in setup_per_zone_pages_min() with zone->lock.
+There seems to be no need for the lru_lock anymore, but there is a need for
+zone->lock instead, because that function may call move_freepages() via
+setup_zone_migrate_reserve().
+
+Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
+Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+Tested-by: Yasunori Goto <y-goto@jp.fujitsu.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/page_alloc.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -4224,7 +4224,7 @@ void setup_per_zone_pages_min(void)
+ for_each_zone(zone) {
+ u64 tmp;
+
+- spin_lock_irqsave(&zone->lru_lock, flags);
++ spin_lock_irqsave(&zone->lock, flags);
+ tmp = (u64)pages_min * zone->present_pages;
+ do_div(tmp, lowmem_pages);
+ if (is_highmem(zone)) {
+@@ -4256,7 +4256,7 @@ void setup_per_zone_pages_min(void)
+ zone->pages_low = zone->pages_min + (tmp >> 2);
+ zone->pages_high = zone->pages_min + (tmp >> 1);
+ setup_zone_migrate_reserve(zone);
+- spin_unlock_irqrestore(&zone->lru_lock, flags);
++ spin_unlock_irqrestore(&zone->lock, flags);
+ }
+
+ /* update totalreserve_pages */