diff options
Diffstat (limited to 'fs/proc/task_mmu.c')
| -rw-r--r-- | fs/proc/task_mmu.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 2b9a7607cbd5..1030a716d155 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -597,9 +597,6 @@ static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr,  		if (!page)  			continue; -		if (PageReserved(page)) -			continue; -  		/* Clear accessed and referenced bits. */  		ptep_test_and_clear_young(vma, addr, pte);  		ClearPageReferenced(page); @@ -750,6 +747,8 @@ static void pte_to_pagemap_entry(pagemap_entry_t *pme, pte_t pte)  	else if (pte_present(pte))  		*pme = make_pme(PM_PFRAME(pte_pfn(pte))  				| PM_PSHIFT(PAGE_SHIFT) | PM_PRESENT); +	else +		*pme = make_pme(PM_NOT_PRESENT);  }  #ifdef CONFIG_TRANSPARENT_HUGEPAGE @@ -764,6 +763,8 @@ static void thp_pmd_to_pagemap_entry(pagemap_entry_t *pme,  	if (pmd_present(pmd))  		*pme = make_pme(PM_PFRAME(pmd_pfn(pmd) + offset)  				| PM_PSHIFT(PAGE_SHIFT) | PM_PRESENT); +	else +		*pme = make_pme(PM_NOT_PRESENT);  }  #else  static inline void thp_pmd_to_pagemap_entry(pagemap_entry_t *pme, @@ -804,8 +805,10 @@ static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,  		/* check to see if we've left 'vma' behind  		 * and need a new, higher one */ -		if (vma && (addr >= vma->vm_end)) +		if (vma && (addr >= vma->vm_end)) {  			vma = find_vma(walk->mm, addr); +			pme = make_pme(PM_NOT_PRESENT); +		}  		/* check that 'vma' actually covers this address,  		 * and that it isn't a huge page vma */ @@ -833,6 +836,8 @@ static void huge_pte_to_pagemap_entry(pagemap_entry_t *pme,  	if (pte_present(pte))  		*pme = make_pme(PM_PFRAME(pte_pfn(pte) + offset)  				| PM_PSHIFT(PAGE_SHIFT) | PM_PRESENT); +	else +		*pme = make_pme(PM_NOT_PRESENT);  }  /* This function walks within one hugetlb entry in the single call */ @@ -842,7 +847,7 @@ static int pagemap_hugetlb_range(pte_t *pte, unsigned long hmask,  {  	struct pagemapread *pm = walk->private;  	int err = 0; -	pagemap_entry_t pme = make_pme(PM_NOT_PRESENT); +	pagemap_entry_t pme;  	for (; addr != end; addr += PAGE_SIZE) {  		int offset = (addr & ~hmask) >> PAGE_SHIFT;  | 
