diff -urN v2.4.9-ac16/mm/memory.c foo/mm/memory.c
--- v2.4.9-ac16/mm/memory.c	Thu Sep 27 16:00:16 2001
+++ foo/mm/memory.c	Thu Sep 27 16:03:36 2001
@@ -296,7 +296,9 @@
 		if (pte_none(pte))
 			continue;
 		if (pte_present(pte)) {
-			freed ++;
+			struct page *page = pte_page(pte);
+			if (VALID_PAGE(page) && !PageReserved(page))
+				freed ++;
 			/* This will eventually call __free_pte on the pte. */
 			tlb_remove_page(tlb, ptep, address + offset);
 		} else {
