--- 2.5.44-mm3/mm/memory.c 2002-10-23 10:20:08.000000000 -0500 +++ 2.5.44-mm3-shsent/mm/memory.c 2002-10-23 10:42:56.000000000 -0500 @@ -1823,6 +1823,7 @@ static int do_file_page(struct mm_struct * mm, struct vm_area_struct * vma, unsigned long address, int write_access, pte_t *pte, pmd_t *pmd) { + struct page *ptepage = pmd_page(*pmd); unsigned long pgoff; int err; @@ -1840,7 +1841,7 @@ pgoff = pte_to_pgoff(*pte); pte_unmap(pte); - spin_unlock(&mm->page_table_lock); + pte_page_unlock(ptepage); err = vma->vm_ops->populate(vma, address & PAGE_MASK, PAGE_SIZE, vma->vm_page_prot, pgoff, 0); if (err == -ENOMEM)