diff -ruNp 507-disable-lru-scanning-during-suspend-old/mm/vmscan.c 507-disable-lru-scanning-during-suspend-new/mm/vmscan.c
--- 507-disable-lru-scanning-during-suspend-old/mm/vmscan.c	2004-12-13 19:00:11.000000000 +1100
+++ 507-disable-lru-scanning-during-suspend-new/mm/vmscan.c	2004-12-13 19:00:17.000000000 +1100
@@ -33,6 +33,7 @@
 #include <linux/cpu.h>
 #include <linux/notifier.h>
 #include <linux/rwsem.h>
+#include <linux/suspend.h>
 
 #include <asm/tlbflush.h>
 #include <asm/div64.h>
@@ -893,6 +894,9 @@ int try_to_free_pages(struct zone **zone
 	unsigned long lru_pages = 0;
 	int i;
 
+	if (test_suspend_state(SUSPEND_LRU_FREEZE))
+		return 0;
+
 	sc.gfp_mask = gfp_mask;
 	sc.may_writepage = 0;
 
@@ -1118,7 +1122,7 @@ out:
 
 		zone->prev_priority = zone->temp_priority;
 	}
-	if (!all_zones_ok) {
+	if (!all_zones_ok && !nr_pages) {
 		cond_resched();
 		goto loop_again;
 	}
@@ -1186,6 +1190,8 @@ static int kswapd(void *p)
  */
 void wakeup_kswapd(struct zone *zone)
 {
+	if (test_suspend_state(SUSPEND_LRU_FREEZE))
+		return;
 	if (zone->present_pages == 0)
 		return;
 	if (zone->free_pages > zone->pages_low)
