static int gfs2_jdata_writepage(struct page *page, struct writeback_control *wbc) { struct inode *inode = page->mapping->host; struct gfs2_sbd *sdp = GFS2_SB(inode); int ret; int done_trans = 0; if (PageChecked(page)) { if (wbc->sync_mode != WB_SYNC_ALL) goto out_ignore; ret = gfs2_trans_begin(sdp, RES_DINODE + 1, 0); if (ret) goto out_ignore; done_trans = 1; } ret = gfs2_writepage_common(page, wbc); if (ret > 0) ret = __gfs2_jdata_writepage(page, wbc); if (done_trans) gfs2_trans_end(sdp); return ret; out_ignore: redirty_page_for_writepage(wbc, page); unlock_page(page); return 0; }
static int gfs2_writepage(struct page *page, struct writeback_control *wbc) { int ret; ret = gfs2_writepage_common(page, wbc); if (ret <= 0) return ret; return nobh_writepage(page, gfs2_get_block_noalloc, wbc); }
static int gfs2_writeback_writepage(struct page *page, struct writeback_control *wbc) { int ret; ret = gfs2_writepage_common(page, wbc); if (ret <= 0) return ret; ret = mpage_writepage(page, gfs2_get_block_noalloc, wbc); if (ret == -EAGAIN) ret = block_write_full_page(page, gfs2_get_block_noalloc, wbc); return ret; }
static int gfs2_ordered_writepage(struct page *page, struct writeback_control *wbc) { struct inode *inode = page->mapping->host; struct gfs2_inode *ip = GFS2_I(inode); int ret; ret = gfs2_writepage_common(page, wbc); if (ret <= 0) return ret; if (!page_has_buffers(page)) { create_empty_buffers(page, inode->i_sb->s_blocksize, (1 << BH_Dirty)|(1 << BH_Uptodate)); } gfs2_page_add_databufs(ip, page, 0, inode->i_sb->s_blocksize-1); return block_write_full_page(page, gfs2_get_block_noalloc, wbc); }