return __follow_page(mm, address, 0, write, 1); 
pgd_t *pgd; pud_t *pud; pmd_t *pmd; pte_t *ptep, pte; unsigned long pfn; struct page *page;  page = follow_huge_addr(mm, address, write); if (! IS_ERR(page)) return page;  pgd = pgd_offset(mm, address); if (pgd_none(*pgd) || unlikely(pgd_bad(*pgd))) goto out;  pud = pud_offset(pgd, address); if (pud_none(*pud) || unlikely(pud_bad(*pud))) goto out;  pmd = pmd_offset(pud, address); if (pmd_none(*pmd) || unlikely(pmd_bad(*pmd))) goto out; if (pmd_huge(*pmd)) return follow_huge_pmd(mm, address, pmd, write);  ptep = pte_offset_map(pmd, address); if (!ptep) goto out;  pte = *ptep; pte_unmap(ptep); if (pte_present(pte)) { if (write && !pte_write(pte)) goto out; pfn = pte_pfn(pte); if (pfn_valid(pfn)) { page = pfn_to_page(pfn); if (write && !pte_dirty(pte) &&!PageDirty(page)) set_page_dirty(page); mark_page_accessed(page); return page; } }  out: return NULL; 
follow_page(struct mm_struct *mm, unsigned long address, int write){	return __follow_page(mm, address, 0, write, 1);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/c34d1b4d165c67b966bca4aba026443d7ff161eb/memory.c/clean/mm/memory.c