Signed-off-by: Andrew Morton 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; }