/* not shared and writable, use empty_zero_page */ page = virt_to_page(empty_zero_page); 
/* not shared and writable, use ZERO_PAGE() */ page = ZERO_PAGE(address); 
xip_file_nopage(struct vm_area_struct * area,		   unsigned long address,		   int *type){	struct file *file = area->vm_file;	struct address_space *mapping = file->f_mapping;	struct inode *inode = mapping->host;	struct page *page;	unsigned long size, pgoff, endoff;	pgoff = ((address - area->vm_start) >> PAGE_CACHE_SHIFT)		+ area->vm_pgoff;	endoff = ((area->vm_end - area->vm_start) >> PAGE_CACHE_SHIFT)		+ area->vm_pgoff;	size = (i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;	if (pgoff >= size) {		return NULL;	}	page = mapping->a_ops->get_xip_page(mapping, pgoff*(PAGE_SIZE/512), 0);	if (!IS_ERR(page)) {		BUG_ON(!PageUptodate(page));		return page;	}	if (PTR_ERR(page) != -ENODATA)		return NULL;	/* sparse block */	if ((area->vm_flags & (VM_WRITE | VM_MAYWRITE)) &&	    (area->vm_flags & (VM_SHARED| VM_MAYSHARE)) &&	    (!(mapping->host->i_sb->s_flags & MS_RDONLY))) {		/* maybe shared writable, allocate new block */		page = mapping->a_ops->get_xip_page (mapping,			pgoff*(PAGE_SIZE/512), 1);		if (IS_ERR(page))			return NULL;		BUG_ON(!PageUptodate(page));		/* unmap page at pgoff from all other vmas */		__xip_unmap(mapping, pgoff);	} else {		/* not shared and writable, use empty_zero_page */		page = virt_to_page(empty_zero_page);	}	return page;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/afa597ba20e9ef55fc6283c1a564854b1c9f13c0/filemap_xip.c/buggy/mm/filemap_xip.c