diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 6dddac4548e118f94a608afd1f79a9da0d69ef28..7b41f7c290cee9059ec820bbe94eb4b29f0a4b3d 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -714,7 +714,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)) { @@ -731,6 +733,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; } #else