diff options
Diffstat (limited to 'fs/gfs2/bmap.c')
-rw-r--r-- | fs/gfs2/bmap.c | 15 |
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 | ||
1195 | out_unlock: | ||
1196 | gfs2_write_unlock(inode); | ||
1188 | out: | 1197 | out: |
1189 | return 0; | 1198 | return 0; |
1190 | } | 1199 | } |