|
@@ -815,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);
|
|
|
|
|
@@ -825,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);
|
|
|
|
|
@@ -834,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);
|