From: Michal Hocko Date: Fri, 21 Sep 2012 01:01:42 +0000 (+1000) Subject: hugetlb: do not use vma_hugecache_offset() for vma_prio_tree_foreach X-Git-Tag: next-20120925~1^2~191 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=87acfa78e0540a86f4c6a39923414f9144d4a42e;p=karo-tx-linux.git hugetlb: do not use vma_hugecache_offset() for vma_prio_tree_foreach 0c176d5 ("mm: hugetlb: fix pgoff computation when unmapping page from vma") fixed pgoff calculation but it has replaced it by vma_hugecache_offset() which is not approapriate for offsets used for vma_prio_tree_foreach() because that one expects index in page units rather than in huge_page_shift. Using vma_hugecache_offset() is not incorrect because the pgoff will fit into the same vmas but it is confusing so the standard PAGE_SHIFT based index calculation is used instead. Signed-off-by: Michal Hocko Acked-by: Hillf Danton Cc: Mel Gorman Cc: KAMEZAWA Hiroyuki Cc: Andrea Arcangeli Cc: David Rientjes Signed-off-by: Andrew Morton --- diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 8536741f069b..de5d1dcf34fe 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -2480,7 +2480,8 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma, * from page cache lookup which is in HPAGE_SIZE units. */ address = address & huge_page_mask(h); - pgoff = vma_hugecache_offset(h, vma, address); + pgoff = ((address - vma->vm_start) >> PAGE_SHIFT) + + vma->vm_pgoff; mapping = vma->vm_file->f_dentry->d_inode->i_mapping; /*