diff -urN 2.4.19pre6/arch/arm/mm/mm-armo.c pgt-cache/arch/arm/mm/mm-armo.c
--- 2.4.19pre6/arch/arm/mm/mm-armo.c	Tue May  1 19:35:17 2001
+++ pgt-cache/arch/arm/mm/mm-armo.c	Fri Apr  5 18:06:57 2002
@@ -104,6 +104,7 @@
 no_pte:
 	spin_unlock(&mm->page_table_lock);
 	pmd_free(new_pmd);
+	check_pgt_cache();
 	free_pgd_slow(new_pgd);
 	return NULL;
 
diff -urN 2.4.19pre6/arch/arm/mm/mm-armv.c pgt-cache/arch/arm/mm/mm-armv.c
--- 2.4.19pre6/arch/arm/mm/mm-armv.c	Fri Apr  5 10:10:44 2002
+++ pgt-cache/arch/arm/mm/mm-armv.c	Fri Apr  5 18:06:57 2002
@@ -123,6 +123,7 @@
 no_pte:
 	spin_unlock(&mm->page_table_lock);
 	pmd_free(new_pmd);
+	check_pgt_cache();
 	free_pages((unsigned long)new_pgd, 2);
 	return NULL;
 
@@ -157,6 +158,7 @@
 	pmd_clear(pmd);
 	pte_free(pte);
 	pmd_free(pmd);
+	check_pgt_cache();
 free:
 	free_pages((unsigned long) pgd, 2);
 }
diff -urN 2.4.19pre6/kernel/fork.c pgt-cache/kernel/fork.c
--- 2.4.19pre6/kernel/fork.c	Fri Apr  5 10:11:17 2002
+++ pgt-cache/kernel/fork.c	Fri Apr  5 18:07:17 2002
@@ -254,6 +254,7 @@
 {
 	BUG_ON(mm == &init_mm);
 	pgd_free(mm->pgd);
+	check_pgt_cache();
 	destroy_context(mm);
 	free_mm(mm);
 }
diff -urN 2.4.19pre6/mm/memory.c pgt-cache/mm/memory.c
--- 2.4.19pre6/mm/memory.c	Fri Apr  5 10:11:18 2002
+++ pgt-cache/mm/memory.c	Fri Apr  5 18:06:57 2002
@@ -1412,6 +1412,7 @@
 		 */
 		if (!pgd_none(*pgd)) {
 			pmd_free(new);
+			check_pgt_cache();
 			goto out;
 		}
 	}
@@ -1446,6 +1447,7 @@
 			 */
 			if (!pmd_none(*pmd)) {
 				pte_free(new);
+				check_pgt_cache();
 				goto out;
 			}
 		}