diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 9330da26e74af86075b32a02bfdfef77d489d20b..a9b3d691a2dbc5d8d3bbf5f439dc339729c72bb1 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -709,7 +709,9 @@ static int smaps_hugetlb_range(pte_t *pte, unsigned long hmask, struct mem_size_stats *mss = walk->private; struct vm_area_struct *vma = walk->vma; struct page *page = NULL; + spinlock_t *ptl; + ptl = huge_pte_lock(hstate_vma(vma), walk->mm, pte); if (pte_present(*pte)) { page = vm_normal_page(vma, addr, *pte); } else if (is_swap_pte(*pte)) { @@ -726,6 +728,7 @@ static int smaps_hugetlb_range(pte_t *pte, unsigned long hmask, else mss->private_hugetlb += huge_page_size(hstate_vma(vma)); } + spin_unlock(ptl); return 0; } #endif /* HUGETLB_PAGE */