X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fi386%2Fmm%2Fhugetlbpage.c;h=a0eab6715cbd2e8bd748eea8085defbb4d7edd57;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=a8dbbc57b7d4eba01674221ab9a4285859312255;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/arch/i386/mm/hugetlbpage.c b/arch/i386/mm/hugetlbpage.c index a8dbbc57b..a0eab6715 100644 --- a/arch/i386/mm/hugetlbpage.c +++ b/arch/i386/mm/hugetlbpage.c @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -149,9 +148,6 @@ follow_huge_addr(struct mm_struct *mm, unsigned long address, int write) struct page *page; struct vm_area_struct *vma; - if (! mm->used_hugetlb) - return ERR_PTR(-EINVAL); - vma = find_vma(mm, addr); if (!vma || !is_vm_hugetlb_page(vma)) return ERR_PTR(-EINVAL); @@ -248,8 +244,15 @@ int hugetlb_prefault(struct address_space *mapping, struct vm_area_struct *vma) ret = -ENOMEM; goto out; } - if (!pte_none(*pte)) - continue; + + if (!pte_none(*pte)) { + pmd_t *pmd = (pmd_t *) pte; + + page = pmd_page(*pmd); + pmd_clear(pmd); + dec_page_state(nr_page_table_pages); + page_cache_release(page); + } idx = ((addr - vma->vm_start) >> HPAGE_SHIFT) + (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT));