[PATCH] mm: hugetlb: fix pgoff computation when unmapping page from vma

From: Hillf Danton
Date: Tue Dec 20 2011 - 08:46:00 EST


The computation for pgoff is incorrect, at least with

(vma->vm_pgoff >> PAGE_SHIFT)

involved. It is fixed with the available method if HPAGE_SIZE is concerned in
page cache lookup.

Cc: Michal Hocko <mhocko@xxxxxxx>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Hillf Danton <dhillf@xxxxxxxxx>
---

--- a/mm/hugetlb.c Tue Dec 20 21:26:30 2011
+++ b/mm/hugetlb.c Tue Dec 20 21:40:44 2011
@@ -2315,8 +2315,7 @@ static int unmap_ref_private(struct mm_s
* from page cache lookup which is in HPAGE_SIZE units.
*/
address = address & huge_page_mask(h);
- pgoff = ((address - vma->vm_start) >> PAGE_SHIFT)
- + (vma->vm_pgoff >> PAGE_SHIFT);
+ pgoff = linear_hugepage_index(vma, address);
mapping = (struct address_space *)page_private(page);

/*
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/