/* Called under journal->j_list_lock. The caller provided us with a ref against the buffer, and we drop that here.  */
static void release_buffer_page(struct buffer_head *bh)
/* Called under journal->j_list_lock. The caller provided us with a ref against the buffer, and we drop that here.  */
static void release_buffer_page(struct buffer_head *bh)
{
	struct page *page;
	if (buffer_dirty(bh))
		goto nope;
	if (atomic_read(&bh->b_count) != 1)
		goto nope;
	page = bh->b_page;
	if (!page)
		goto nope;
	if (page->mapping)
		goto nope;
	if (!trylock_page(page))
		goto nope;
	page_cache_get(page);
	__brelse(bh);
	try_to_free_buffers(page);
	unlock_page(page);
	page_cache_release(page);
	return;
nope:
	__brelse(bh);
}