} while (len <= vma->vm_start); 
} while (len < vma->vm_start); 
arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,			  const unsigned long len, const unsigned long pgoff,			  const unsigned long flags){	struct vm_area_struct *vma;	struct mm_struct *mm = current->mm;	unsigned long addr = addr0;	/* requested length too big for entire address space */	if (len > TASK_SIZE)		return -ENOMEM;	/* requesting a specific address */	if (addr) {		addr = PAGE_ALIGN(addr);		vma = find_vma(mm, addr);		if (TASK_SIZE - len >= addr &&				(!vma || addr + len <= vma->vm_start))			return addr;	}	/* either no address requested or can't fit in requested address hole */	addr = mm->free_area_cache;	/* make sure it can fit in the remaining address space */	if (addr >= len) {		vma = find_vma(mm, addr-len);		if (!vma || addr <= vma->vm_start)			/* remember the address as a hint for next time */			return (mm->free_area_cache = addr-len);	}	addr = mm->mmap_base-len;	do {		/*		 * Lookup failure means no vma is above this address,		 * else if new region fits below vma->vm_start,		 * return with success:		 */		vma = find_vma(mm, addr);		if (!vma || addr+len <= vma->vm_start)			/* remember the address as a hint for next time */			return (mm->free_area_cache = addr);		/* try just below the current vma->vm_start */		addr = vma->vm_start-len;	} while (len <= vma->vm_start);	/*	 * A failed mmap() very likely causes application failure,	 * so fall back to the bottom-up function here. This scenario	 * can happen with large stack limits and large mmap()	 * allocations.	 */	mm->free_area_cache = TASK_UNMAPPED_BASE;	addr = arch_get_unmapped_area(filp, addr0, len, pgoff, flags);	/*	 * Restore the topdown base:	 */	mm->free_area_cache = mm->mmap_base;	return addr;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/49a43876b935c811cfd29d8fe998a6912a1cc5c4/mmap.c/clean/mm/mmap.c