} else { 
} else if (vma->vm_flags & VM_NONLINEAR) { 
static int shmem_populate(struct vm_area_struct *vma,	unsigned long addr, unsigned long len,	pgprot_t prot, unsigned long pgoff, int nonblock){	struct inode *inode = vma->vm_file->f_dentry->d_inode;	struct mm_struct *mm = vma->vm_mm;	enum sgp_type sgp = nonblock? SGP_QUICK: SGP_CACHE;	unsigned long size;	size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT;	if (pgoff >= size || pgoff + (len >> PAGE_SHIFT) > size)		return -EINVAL;	while ((long) len > 0) {		struct page *page = NULL;		int err;		/*		 * Will need changing if PAGE_CACHE_SIZE != PAGE_SIZE		 */		err = shmem_getpage(inode, pgoff, &page, sgp, NULL);		if (err)			return err;		/* Page may still be null, but only if nonblock was set. */		if (page) {			mark_page_accessed(page);			err = install_page(mm, vma, addr, page, prot);			if (err) {				page_cache_release(page);				return err;			}		} else {			/* No page was found just because we can't read it in			 * now (being here implies nonblock != 0), but the page			 * may exist, so set the PTE to fault it in later. */    			err = install_file_pte(mm, vma, addr, pgoff, prot);			if (err)	    			return err;		}		len -= PAGE_SIZE;		addr += PAGE_SIZE;		pgoff++;	}	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/65500d234e74fc4e8f18e1a429bc24e51e75de4a/shmem.c/buggy/mm/shmem.c