page = virt_to_page(empty_zero_page); 
page = ZERO_PAGE(0); 
do_xip_mapping_read(struct address_space *mapping,		    struct file_ra_state *_ra,		    struct file *filp,		    loff_t *ppos,		    read_descriptor_t *desc,		    read_actor_t actor){	struct inode *inode = mapping->host;	unsigned long index, end_index, offset;	loff_t isize;	BUG_ON(!mapping->a_ops->get_xip_page);	index = *ppos >> PAGE_CACHE_SHIFT;	offset = *ppos & ~PAGE_CACHE_MASK;	isize = i_size_read(inode);	if (!isize)		goto out;	end_index = (isize - 1) >> PAGE_CACHE_SHIFT;	for (;;) {		struct page *page;		unsigned long nr, ret;		/* nr is the maximum number of bytes to copy from this page */		nr = PAGE_CACHE_SIZE;		if (index >= end_index) {			if (index > end_index)				goto out;			nr = ((isize - 1) & ~PAGE_CACHE_MASK) + 1;			if (nr <= offset) {				goto out;			}		}		nr = nr - offset;		page = mapping->a_ops->get_xip_page(mapping,			index*(PAGE_SIZE/512), 0);		if (!page)			goto no_xip_page;		if (unlikely(IS_ERR(page))) {			if (PTR_ERR(page) == -ENODATA) {				/* sparse */				page = virt_to_page(empty_zero_page);			} else {				desc->error = PTR_ERR(page);				goto out;			}		} else			BUG_ON(!PageUptodate(page));		/* If users can be writing to this page using arbitrary		 * virtual addresses, take care about potential aliasing		 * before reading the page on the kernel side.		 */		if (mapping_writably_mapped(mapping))			flush_dcache_page(page);		/*		 * Ok, we have the page, and it's up-to-date, so		 * now we can copy it to user space...		 *		 * The actor routine returns how many bytes were actually used..		 * NOTE! This may not be the same as how much of a user buffer		 * we filled up (we may be padding etc), so we can only update		 * "pos" here (the actor routine has to update the user buffer		 * pointers and the remaining count).		 */		ret = actor(desc, page, offset, nr);		offset += ret;		index += offset >> PAGE_CACHE_SHIFT;		offset &= ~PAGE_CACHE_MASK;		if (ret == nr && desc->count)			continue;		goto out;no_xip_page:		/* Did not get the page. Report it */		desc->error = -EIO;		goto out;	}out:	*ppos = ((loff_t) index << PAGE_CACHE_SHIFT) + offset;	if (filp)		file_accessed(filp);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/afa597ba20e9ef55fc6283c1a564854b1c9f13c0/filemap_xip.c/buggy/mm/filemap_xip.c