aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/bmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/bmap.c')
-rw-r--r--fs/gfs2/bmap.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 79581b9bdebb..4df26ef2b2b1 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -1002,11 +1002,16 @@ static void gfs2_iomap_page_done(struct inode *inode, loff_t pos,
1002 unsigned copied, struct page *page, 1002 unsigned copied, struct page *page,
1003 struct iomap *iomap) 1003 struct iomap *iomap)
1004{ 1004{
1005 struct gfs2_trans *tr = current->journal_info;
1005 struct gfs2_inode *ip = GFS2_I(inode); 1006 struct gfs2_inode *ip = GFS2_I(inode);
1006 struct gfs2_sbd *sdp = GFS2_SB(inode); 1007 struct gfs2_sbd *sdp = GFS2_SB(inode);
1007 1008
1008 if (page && !gfs2_is_stuffed(ip)) 1009 if (page && !gfs2_is_stuffed(ip))
1009 gfs2_page_add_databufs(ip, page, offset_in_page(pos), copied); 1010 gfs2_page_add_databufs(ip, page, offset_in_page(pos), copied);
1011
1012 if (tr->tr_num_buf_new)
1013 __mark_inode_dirty(inode, I_DIRTY_DATASYNC);
1014
1010 gfs2_trans_end(sdp); 1015 gfs2_trans_end(sdp);
1011} 1016}
1012 1017
@@ -1099,8 +1104,6 @@ static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos,
1099 tr = current->journal_info; 1104 tr = current->journal_info;
1100 if (tr->tr_num_buf_new) 1105 if (tr->tr_num_buf_new)
1101 __mark_inode_dirty(inode, I_DIRTY_DATASYNC); 1106 __mark_inode_dirty(inode, I_DIRTY_DATASYNC);
1102 else
1103 gfs2_trans_add_meta(ip->i_gl, mp->mp_bh[0]);
1104 1107
1105 gfs2_trans_end(sdp); 1108 gfs2_trans_end(sdp);
1106 } 1109 }
@@ -1181,10 +1184,16 @@ static int gfs2_iomap_end(struct inode *inode, loff_t pos, loff_t length,
1181 1184
1182 if (ip->i_qadata && ip->i_qadata->qa_qd_num) 1185 if (ip->i_qadata && ip->i_qadata->qa_qd_num)
1183 gfs2_quota_unlock(ip); 1186 gfs2_quota_unlock(ip);
1187
1188 if (unlikely(!written))
1189 goto out_unlock;
1190
1184 if (iomap->flags & IOMAP_F_SIZE_CHANGED) 1191 if (iomap->flags & IOMAP_F_SIZE_CHANGED)
1185 mark_inode_dirty(inode); 1192 mark_inode_dirty(inode);
1186 gfs2_write_unlock(inode); 1193 set_bit(GLF_DIRTY, &ip->i_gl->gl_flags);
1187 1194
1195out_unlock:
1196 gfs2_write_unlock(inode);
1188out: 1197out:
1189 return 0; 1198 return 0;
1190} 1199}