unlock_page(page); page_cache_release(page); 
void __invalidate_metapages(struct inode *ip, s64 addr, int len){	struct metapage **hash_ptr;	unsigned long lblock;	int l2BlocksPerPage = PAGE_CACHE_SHIFT - ip->i_blkbits;	/* All callers are interested in block device's mapping */	struct address_space *mapping = ip->i_sb->s_bdev->bd_inode->i_mapping;	struct metapage *mp;	struct page *page;	/*	 * First, mark metapages to discard.  They will eventually be	 * released, but should not be written.	 */	for (lblock = addr; lblock < addr + len;	     lblock += 1 << l2BlocksPerPage) {		hash_ptr = meta_hash(mapping, lblock);again:		spin_lock(&meta_lock);		mp = search_hash(hash_ptr, mapping, lblock);		if (mp) {			if (test_bit(META_stale, &mp->flag)) {				spin_unlock(&meta_lock);				msleep(1);				goto again;			}			clear_bit(META_dirty, &mp->flag);			set_bit(META_discard, &mp->flag);			spin_unlock(&meta_lock);		} else {			spin_unlock(&meta_lock);			page = find_lock_page(mapping, lblock>>l2BlocksPerPage);			if (page) {				block_invalidatepage(page, 0);				unlock_page(page);				page_cache_release(page);			}		}	}}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/7fab479bebb96b1b4888bdae9b42e1fa9c5d3f38/jfs_metapage.c/clean/fs/jfs/jfs_metapage.c