X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=mm%2Ffremap.c;h=036ccfbbf223e4b33c5b326b46d3abaca0314597;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=2f211f50257a7787c0b5bfdc99700ea0e5924ddb;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/mm/fremap.c b/mm/fremap.c index 2f211f502..036ccfbbf 100644 --- a/mm/fremap.c +++ b/mm/fremap.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -61,8 +62,9 @@ int install_page(struct mm_struct *mm, struct vm_area_struct *vma, pgoff_t size; int err = -ENOMEM; pte_t *pte; - pgd_t *pgd; pmd_t *pmd; + pud_t *pud; + pgd_t *pgd; pte_t pte_val; pgd = pgd_offset(mm, addr); @@ -70,8 +72,12 @@ int install_page(struct mm_struct *mm, struct vm_area_struct *vma, if (!vx_rsspages_avail(mm, 1)) goto err_unlock; + + pud = pud_alloc(mm, pgd, addr); + if (!pud) + goto err_unlock; - pmd = pmd_alloc(mm, pgd, addr); + pmd = pmd_alloc(mm, pud, addr); if (!pmd) goto err_unlock; @@ -117,14 +123,19 @@ int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, { int err = -ENOMEM; pte_t *pte; - pgd_t *pgd; pmd_t *pmd; + pud_t *pud; + pgd_t *pgd; pte_t pte_val; pgd = pgd_offset(mm, addr); spin_lock(&mm->page_table_lock); + + pud = pud_alloc(mm, pgd, addr); + if (!pud) + goto err_unlock; - pmd = pmd_alloc(mm, pgd, addr); + pmd = pmd_alloc(mm, pud, addr); if (!pmd) goto err_unlock; @@ -226,9 +237,7 @@ asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size, flush_dcache_mmap_lock(mapping); vma->vm_flags |= VM_NONLINEAR; vma_prio_tree_remove(vma, &mapping->i_mmap); - vma_prio_tree_init(vma); - list_add_tail(&vma->shared.vm_set.list, - &mapping->i_mmap_nonlinear); + vma_nonlinear_insert(vma, &mapping->i_mmap_nonlinear); flush_dcache_mmap_unlock(mapping); spin_unlock(&mapping->i_mmap_lock); }