spin_unlock(&mm->page_table_lock); 
int hugetlb_prefault(struct address_space *mapping, struct vm_area_struct *vma){	struct mm_struct *mm = current->mm;	unsigned long addr;	int ret = 0;	WARN_ON(!is_vm_hugetlb_page(vma));	BUG_ON(vma->vm_start & ~HPAGE_MASK);	BUG_ON(vma->vm_end & ~HPAGE_MASK);	hugetlb_prefault_arch_hook(mm);	spin_lock(&mm->page_table_lock);	for (addr = vma->vm_start; addr < vma->vm_end; addr += HPAGE_SIZE) {		unsigned long idx;		pte_t *pte = huge_pte_alloc(mm, addr);		struct page *page;		if (!pte) {			ret = -ENOMEM;			goto out;		}		idx = ((addr - vma->vm_start) >> HPAGE_SHIFT)			+ (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT));		page = find_get_page(mapping, idx);		if (!page) {			/* charge the fs quota first */			if (hugetlb_get_quota(mapping)) {				ret = -ENOMEM;				goto out;			}			page = alloc_huge_page();			if (!page) {				hugetlb_put_quota(mapping);				ret = -ENOMEM;				goto out;			}			ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC);			if (! ret) {				unlock_page(page);			} else {				hugetlb_put_quota(mapping);				free_huge_page(page);				goto out;			}		}		add_mm_counter(mm, file_rss, HPAGE_SIZE / PAGE_SIZE);		set_huge_pte_at(mm, addr, pte, make_huge_pte(vma, page));	}out:	spin_unlock(&mm->page_table_lock);	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/c74df32c724a1652ad8399b4891bb02c9d43743a/hugetlb.c/clean/mm/hugetlb.c