|
@@ -122,14 +122,13 @@ out:
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * gfs2_writeback_writepage - Write page for writeback mappings
|
|
|
+ * gfs2_writepage - Write page for writeback mappings
|
|
|
* @page: The page
|
|
|
* @wbc: The writeback control
|
|
|
*
|
|
|
*/
|
|
|
|
|
|
-static int gfs2_writeback_writepage(struct page *page,
|
|
|
- struct writeback_control *wbc)
|
|
|
+static int gfs2_writepage(struct page *page, struct writeback_control *wbc)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
@@ -140,32 +139,6 @@ static int gfs2_writeback_writepage(struct page *page,
|
|
|
return nobh_writepage(page, gfs2_get_block_noalloc, wbc);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * gfs2_ordered_writepage - Write page for ordered data files
|
|
|
- * @page: The page to write
|
|
|
- * @wbc: The writeback control
|
|
|
- *
|
|
|
- */
|
|
|
-
|
|
|
-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);
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* __gfs2_jdata_writepage - The core of jdata writepage
|
|
|
* @page: The page to write
|
|
@@ -842,6 +815,8 @@ static int gfs2_write_end(struct file *file, struct address_space *mapping,
|
|
|
unsigned int from = pos & (PAGE_CACHE_SIZE - 1);
|
|
|
unsigned int to = from + len;
|
|
|
int ret;
|
|
|
+ struct gfs2_trans *tr = current->journal_info;
|
|
|
+ BUG_ON(!tr);
|
|
|
|
|
|
BUG_ON(gfs2_glock_is_locked_by_me(ip->i_gl) == NULL);
|
|
|
|
|
@@ -852,8 +827,6 @@ static int gfs2_write_end(struct file *file, struct address_space *mapping,
|
|
|
goto failed;
|
|
|
}
|
|
|
|
|
|
- gfs2_trans_add_meta(ip->i_gl, dibh);
|
|
|
-
|
|
|
if (gfs2_is_stuffed(ip))
|
|
|
return gfs2_stuffed_write_end(inode, dibh, pos, len, copied, page);
|
|
|
|
|
@@ -861,6 +834,11 @@ static int gfs2_write_end(struct file *file, struct address_space *mapping,
|
|
|
gfs2_page_add_databufs(ip, page, from, to);
|
|
|
|
|
|
ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata);
|
|
|
+ if (tr->tr_num_buf_new)
|
|
|
+ __mark_inode_dirty(inode, I_DIRTY_DATASYNC);
|
|
|
+ else
|
|
|
+ gfs2_trans_add_meta(ip->i_gl, dibh);
|
|
|
+
|
|
|
|
|
|
if (inode == sdp->sd_rindex) {
|
|
|
adjust_fs_space(inode);
|
|
@@ -1107,7 +1085,7 @@ cannot_release:
|
|
|
}
|
|
|
|
|
|
static const struct address_space_operations gfs2_writeback_aops = {
|
|
|
- .writepage = gfs2_writeback_writepage,
|
|
|
+ .writepage = gfs2_writepage,
|
|
|
.writepages = gfs2_writepages,
|
|
|
.readpage = gfs2_readpage,
|
|
|
.readpages = gfs2_readpages,
|
|
@@ -1123,7 +1101,7 @@ static const struct address_space_operations gfs2_writeback_aops = {
|
|
|
};
|
|
|
|
|
|
static const struct address_space_operations gfs2_ordered_aops = {
|
|
|
- .writepage = gfs2_ordered_writepage,
|
|
|
+ .writepage = gfs2_writepage,
|
|
|
.writepages = gfs2_writepages,
|
|
|
.readpage = gfs2_readpage,
|
|
|
.readpages = gfs2_readpages,
|