if (vma->vm_flags & (VM_LOCKED|VM_RESERVED)) 
if (vma->vm_flags & VM_LOCKED) 
static int try_to_unmap_file(struct page *page){	struct address_space *mapping = page->mapping;	pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);	struct vm_area_struct *vma;	struct prio_tree_iter iter;	int ret = SWAP_AGAIN;	unsigned long cursor;	unsigned long max_nl_cursor = 0;	unsigned long max_nl_size = 0;	unsigned int mapcount;	spin_lock(&mapping->i_mmap_lock);	vma_prio_tree_foreach(vma, &iter, &mapping->i_mmap, pgoff, pgoff) {		ret = try_to_unmap_one(page, vma);		if (ret == SWAP_FAIL || !page_mapped(page))			goto out;	}	if (list_empty(&mapping->i_mmap_nonlinear))		goto out;	list_for_each_entry(vma, &mapping->i_mmap_nonlinear,						shared.vm_set.list) {		if (vma->vm_flags & (VM_LOCKED|VM_RESERVED))			continue;		cursor = (unsigned long) vma->vm_private_data;		if (cursor > max_nl_cursor)			max_nl_cursor = cursor;		cursor = vma->vm_end - vma->vm_start;		if (cursor > max_nl_size)			max_nl_size = cursor;	}	if (max_nl_size == 0) {	/* any nonlinears locked or reserved */		ret = SWAP_FAIL;		goto out;	}	/*	 * We don't try to search for this page in the nonlinear vmas,	 * and page_referenced wouldn't have found it anyway.  Instead	 * just walk the nonlinear vmas trying to age and unmap some.	 * The mapcount of the page we came in with is irrelevant,	 * but even so use it as a guide to how hard we should try?	 */	mapcount = page_mapcount(page);	if (!mapcount)		goto out;	cond_resched_lock(&mapping->i_mmap_lock);	max_nl_size = (max_nl_size + CLUSTER_SIZE - 1) & CLUSTER_MASK;	if (max_nl_cursor == 0)		max_nl_cursor = CLUSTER_SIZE;	do {		list_for_each_entry(vma, &mapping->i_mmap_nonlinear,						shared.vm_set.list) {			if (vma->vm_flags & (VM_LOCKED|VM_RESERVED))				continue;			cursor = (unsigned long) vma->vm_private_data;			while ( cursor < max_nl_cursor &&				cursor < vma->vm_end - vma->vm_start) {				try_to_unmap_cluster(cursor, &mapcount, vma);				cursor += CLUSTER_SIZE;				vma->vm_private_data = (void *) cursor;				if ((int)mapcount <= 0)					goto out;			}			vma->vm_private_data = (void *) max_nl_cursor;		}		cond_resched_lock(&mapping->i_mmap_lock);		max_nl_cursor += CLUSTER_SIZE;	} while (max_nl_cursor <= max_nl_size);	/*	 * Don't loop forever (perhaps all the remaining pages are	 * in locked vmas).  Reset cursor on all unreserved nonlinear	 * vmas, now forgetting on which ones it had fallen behind.	 */	list_for_each_entry(vma, &mapping->i_mmap_nonlinear,						shared.vm_set.list) {		if (!(vma->vm_flags & VM_RESERVED))			vma->vm_private_data = NULL;	}out:	spin_unlock(&mapping->i_mmap_lock);	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/101d2be7646b7dd1c367d50208a59b29fce61398/rmap.c/buggy/mm/rmap.c