

Signed-off-by: Andrew Morton <akpm@osdl.org>
Index: linux-2.6.8-rc1/mm/memory.c
===================================================================
--- linux-2.6.8-rc1.orig/mm/memory.c	2004-07-15 10:03:31.429426327 +1000
+++ linux-2.6.8-rc1/mm/memory.c	2004-07-15 10:03:53.940842595 +1000
@@ -567,12 +567,15 @@
 			zap_bytes -= block;
 			if ((long)zap_bytes > 0)
 				continue;
-			if (!atomic && need_resched()) {
+			if (!atomic) {
 				int fullmm = tlb_is_full_mm(*tlbp);
+
 				tlb_finish_mmu(*tlbp, tlb_start, start);
-				cond_resched_lock(&mm->page_table_lock);
-				*tlbp = tlb_gather_mmu(mm, fullmm);
+				spin_unlock(&mm->page_table_lock);
+				cond_resched();
 				tlb_start_valid = 0;
+				spin_lock(&mm->page_table_lock);
+				*tlbp = tlb_gather_mmu(mm, fullmm);
 			}
 			zap_bytes = ZAP_BLOCK_SIZE;
 		}
