if (!PageLocked(page)) PAGE_BUG(page); 
BUG_ON(!PageLocked(page)); 
static int afs_file_readpage(struct file *file, struct page *page){	struct afs_rxfs_fetch_descriptor desc;#ifdef AFS_CACHING_SUPPORT	struct cachefs_page *pageio;#endif	struct afs_vnode *vnode;	struct inode *inode;	int ret;	inode = page->mapping->host;	_enter("{%lu},{%lu}", inode->i_ino, page->index);	vnode = AFS_FS_I(inode);	if (!PageLocked(page))		PAGE_BUG(page);	ret = -ESTALE;	if (vnode->flags & AFS_VNODE_DELETED)		goto error;#ifdef AFS_CACHING_SUPPORT	ret = cachefs_page_get_private(page, &pageio, GFP_NOIO);	if (ret < 0)		goto error;	/* is it cached? */	ret = cachefs_read_or_alloc_page(vnode->cache,					 page,					 afs_file_readpage_read_complete,					 NULL,					 GFP_KERNEL);#else	ret = -ENOBUFS;#endif	switch (ret) {		/* read BIO submitted and wb-journal entry found */	case 1:		BUG(); // TODO - handle wb-journal match		/* read BIO submitted (page in cache) */	case 0:		break;		/* no page available in cache */	case -ENOBUFS:	case -ENODATA:	default:		desc.fid	= vnode->fid;		desc.offset	= page->index << PAGE_CACHE_SHIFT;		desc.size	= min((size_t) (inode->i_size - desc.offset),				      (size_t) PAGE_SIZE);		desc.buffer	= kmap(page);		clear_page(desc.buffer);		/* read the contents of the file from the server into the		 * page */		ret = afs_vnode_fetch_data(vnode, &desc);		kunmap(page);		if (ret < 0) {			if (ret==-ENOENT) {				_debug("got NOENT from server"				       " - marking file deleted and stale");				vnode->flags |= AFS_VNODE_DELETED;				ret = -ESTALE;			}#ifdef AFS_CACHING_SUPPORT			cachefs_uncache_page(vnode->cache, page);#endif			goto error;		}		SetPageUptodate(page);#ifdef AFS_CACHING_SUPPORT		if (cachefs_write_page(vnode->cache,				       page,				       afs_file_readpage_write_complete,				       NULL,				       GFP_KERNEL) != 0		    ) {			cachefs_uncache_page(vnode->cache, page);			unlock_page(page);		}#else		unlock_page(page);#endif	}	_leave(" = 0");	return 0; error:	SetPageError(page);	unlock_page(page);	_leave(" = %d", ret);	return ret;} /* end afs_file_readpage() */
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/cd7619d6bf36564cf54ff7218ef54e558a741913/file.c/buggy/fs/afs/file.c