spin_lock(&meta_lock); if (test_bit(META_forced, &mp->flag)) { clear_bit(META_forced, &mp->flag); mp->count--; spin_unlock(&meta_lock); 
BUG_ON(!page);  lock_page(page); unlock_metapage(mp);  assert(mp->count); if (--mp->count || mp->nohomeok) { unlock_page(page); page_cache_release(page); 
void release_metapage(struct metapage * mp){	struct jfs_log *log;	jfs_info("release_metapage: mp = 0x%p, flag = 0x%lx", mp, mp->flag);	spin_lock(&meta_lock);	if (test_bit(META_forced, &mp->flag)) {		clear_bit(META_forced, &mp->flag);		mp->count--;		spin_unlock(&meta_lock);		return;	}	assert(mp->count);	if (--mp->count || atomic_read(&mp->nohomeok)) {		unlock_metapage(mp);		spin_unlock(&meta_lock);		return;	}	if (mp->page) {		set_bit(META_stale, &mp->flag);		spin_unlock(&meta_lock);		kunmap(mp->page);		mp->data = NULL;		if (test_bit(META_dirty, &mp->flag))			__write_metapage(mp);		if (test_bit(META_sync, &mp->flag)) {			sync_metapage(mp);			clear_bit(META_sync, &mp->flag);		}		if (test_bit(META_discard, &mp->flag)) {			lock_page(mp->page);			block_invalidatepage(mp->page, 0);			unlock_page(mp->page);		}		page_cache_release(mp->page);		mp->page = NULL;		INCREMENT(mpStat.pagefree);		spin_lock(&meta_lock);	}	if (mp->lsn) {		/*		 * Remove metapage from logsynclist.		 */		log = mp->log;		LOGSYNC_LOCK(log);		mp->log = NULL;		mp->lsn = 0;		mp->clsn = 0;		log->count--;		list_del(&mp->synclist);		LOGSYNC_UNLOCK(log);	}	remove_from_hash(mp, meta_hash(mp->mapping, mp->index));	spin_unlock(&meta_lock);	free_metapage(mp);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/7fab479bebb96b1b4888bdae9b42e1fa9c5d3f38/jfs_metapage.c/clean/fs/jfs/jfs_metapage.c