} 
static int ext3_journalled_writepage(struct page *page,				struct writeback_control *wbc){	struct inode *inode = page->mapping->host;	handle_t *handle = NULL;	int ret = 0;	int err;	if (ext3_journal_current_handle())		goto no_write;	handle = ext3_journal_start(inode, ext3_writepage_trans_blocks(inode));	if (IS_ERR(handle)) {		ret = PTR_ERR(handle);		goto no_write;	}	if (!page_has_buffers(page) || PageChecked(page)) {		/*		 * It's mmapped pagecache.  Add buffers and journal it.  There		 * doesn't seem much point in redirtying the page here.		 */		ClearPageChecked(page);		ret = block_prepare_write(page, 0, PAGE_CACHE_SIZE,					ext3_get_block);		if (ret != 0)			goto out_unlock;		ret = walk_page_buffers(handle, page_buffers(page), 0,			PAGE_CACHE_SIZE, NULL, do_journal_get_write_access);		err = walk_page_buffers(handle, page_buffers(page), 0,				PAGE_CACHE_SIZE, NULL, commit_write_fn);		if (ret == 0)			ret = err;		EXT3_I(inode)->i_state |= EXT3_STATE_JDATA;		unlock_page(page);	} else {		/*		 * It may be a page full of checkpoint-mode buffers.  We don't		 * really know unless we go poke around in the buffer_heads.		 * But block_write_full_page will do the right thing.		 */		ret = block_write_full_page(page, ext3_get_block, wbc);	}	err = ext3_journal_stop(handle);	if (!ret)		ret = err;out:	return ret;no_write:	redirty_page_for_writepage(wbc, page);out_unlock:	unlock_page(page);	goto out;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ab4eb43ce759559d7b15c5dde4a1562f202539f6/inode.c/buggy/fs/ext3/inode.c