 /* * We cannot rely on the break test in unmap_vmas: * on the one hand, we don't want to restart our loop * just because that broke out for the page_table_lock; * on the other hand, it does no test when vma is small. */ 
static int unmap_mapping_range_vma(struct vm_area_struct *vma,		unsigned long start_addr, unsigned long end_addr,		struct zap_details *details){	unsigned long restart_addr;	int need_break;again:	restart_addr = vma->vm_truncate_count;	if (is_restart_addr(restart_addr) && start_addr < restart_addr) {		start_addr = restart_addr;		if (start_addr >= end_addr) {			/* Top of vma has been split off since last time */			vma->vm_truncate_count = details->truncate_count;			return 0;		}	}	restart_addr = zap_page_range(vma, start_addr,					end_addr - start_addr, details);	/*	 * We cannot rely on the break test in unmap_vmas:	 * on the one hand, we don't want to restart our loop	 * just because that broke out for the page_table_lock;	 * on the other hand, it does no test when vma is small.	 */	need_break = need_resched() ||			need_lockbreak(details->i_mmap_lock);	if (restart_addr >= end_addr) {		/* We have now completed this vma: mark it so */		vma->vm_truncate_count = details->truncate_count;		if (!need_break)			return 0;	} else {		/* Note restart_addr in vma's truncate_count field */		vma->vm_truncate_count = restart_addr;		if (!need_break)			goto again;	}	spin_unlock(details->i_mmap_lock);	cond_resched();	spin_lock(details->i_mmap_lock);	return -EINTR;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/508034a32b819a2d40aa7ac0dbc8cd2e044c2de6/memory.c/buggy/mm/memory.c