static void try_to_unmap_cluster(unsigned long cursor,	unsigned int *mapcount, struct vm_area_struct *vma){	struct mm_struct *mm = vma->vm_mm;	pgd_t *pgd;	pud_t *pud;	pmd_t *pmd;	pte_t *pte;	pte_t pteval;	struct page *page;	unsigned long address;	unsigned long end;	unsigned long pfn;	/*	 * We need the page_table_lock to protect us from page faults,	 * munmap, fork, etc...	 */	spin_lock(&mm->page_table_lock);	address = (vma->vm_start + cursor) & CLUSTER_MASK;	end = address + CLUSTER_SIZE;	if (address < vma->vm_start)		address = vma->vm_start;	if (end > vma->vm_end)		end = vma->vm_end;	pgd = pgd_offset(mm, address);	if (!pgd_present(*pgd))		goto out_unlock;	pud = pud_offset(pgd, address);	if (!pud_present(*pud))		goto out_unlock;	pmd = pmd_offset(pud, address);	if (!pmd_present(*pmd))		goto out_unlock;	for (pte = pte_offset_map(pmd, address);			address < end; pte++, address += PAGE_SIZE) {		if (!pte_present(*pte))			continue;		pfn = pte_pfn(*pte);		if (!pfn_valid(pfn))			continue;		page = pfn_to_page(pfn);		BUG_ON(PageAnon(page));		if (PageReserved(page))			continue;		if (ptep_clear_flush_young(vma, address, pte))			continue;		/* Nuke the page table entry. */		flush_cache_page(vma, address, pfn);		pteval = ptep_clear_flush(vma, address, pte);		/* If nonlinear, store the file page offset in the pte. */		if (page->index != linear_page_index(vma, address))			set_pte_at(mm, address, pte, pgoff_to_pte(page->index));		/* Move the dirty bit to the physical page now the pte is gone. */		if (pte_dirty(pteval))			set_page_dirty(page);		page_remove_rmap(page);		page_cache_release(page);		dec_mm_counter(mm, rss);		(*mapcount)--;	}	pte_unmap(pte);out_unlock:	spin_unlock(&mm->page_table_lock);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/81b4082dc7666e2bc5ec229d8e837f3bafb96883/rmap.c/clean/mm/rmap.c