diff -ur /md0/kernels/2.4/v2.4.8-ac3/mm/memory.c vm-2.4.8-ac3/mm/memory.c
--- /md0/kernels/2.4/v2.4.8-ac3/mm/memory.c	Mon Aug 13 15:12:54 2001
+++ vm-2.4.8-ac3/mm/memory.c	Mon Aug 13 15:21:00 2001
@@ -238,8 +238,10 @@
 
 cont_copy_pte_range:		set_pte(dst_pte, pte);
 cont_copy_pte_range_noset:	address += PAGE_SIZE;
-				if (address >= end)
-					goto out_unlock;
+				if (address >= end) {
+					spin_unlock(&src->page_table_lock);
+					goto out;
+				}
 				src_pte++;
 				dst_pte++;
 			} while ((unsigned long)src_pte & PTE_TABLE_MASK);
@@ -249,8 +251,6 @@
 			dst_pmd++;
 		} while ((unsigned long)src_pmd & PMD_TABLE_MASK);
 	}
-out_unlock:
-	spin_unlock(&src->page_table_lock);
 out:
 	spin_unlock(&dst->page_table_lock);
 	return 0;
