if (addr > TASK_SIZE - len) return -ENOMEM; if (addr & ~PAGE_MASK) return -EINVAL; if (file && is_file_hugepages(file))  { /* * Check if the given range is hugepage aligned, and * can be made suitable for hugepages. */ ret = prepare_hugepage_range(addr, len); } else { /* * Ensure that a normal request is not falling in a * reserved hugepage range.  For some archs like IA-64, * there is a separate region for hugepages. */ ret = is_hugepage_only_range(current->mm, addr, len); } if (ret) return -EINVAL; return addr; 
if (!(flags & MAP_FIXED)) { unsigned long (*get_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);  get_area = current->mm->get_unmapped_area; if (file && file->f_op && file->f_op->get_unmapped_area) get_area = file->f_op->get_unmapped_area; addr = get_area(file, addr, len, pgoff, flags); if (IS_ERR_VALUE(addr)) return addr; 
get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,		unsigned long pgoff, unsigned long flags){	if (flags & MAP_FIXED) {		unsigned long ret;		if (addr > TASK_SIZE - len)			return -ENOMEM;		if (addr & ~PAGE_MASK)			return -EINVAL;		if (file && is_file_hugepages(file))  {			/*			 * Check if the given range is hugepage aligned, and			 * can be made suitable for hugepages.			 */			ret = prepare_hugepage_range(addr, len);		} else {			/*			 * Ensure that a normal request is not falling in a			 * reserved hugepage range.  For some archs like IA-64,			 * there is a separate region for hugepages.			 */			ret = is_hugepage_only_range(current->mm, addr, len);		}		if (ret)			return -EINVAL;		return addr;	}	if (file && file->f_op && file->f_op->get_unmapped_area)		return file->f_op->get_unmapped_area(file, addr, len,						pgoff, flags);	return current->mm->get_unmapped_area(file, addr, len, pgoff, flags);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/07ab67c8d0d7c1021343b7d5c045033d6bf7be69/mmap.c/clean/mm/mmap.c