|
@@ -754,14 +754,15 @@ static int gfs2_write_inode(struct inode *inode, struct writeback_control *wbc)
|
|
struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl);
|
|
struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl);
|
|
struct backing_dev_info *bdi = inode_to_bdi(metamapping->host);
|
|
struct backing_dev_info *bdi = inode_to_bdi(metamapping->host);
|
|
int ret = 0;
|
|
int ret = 0;
|
|
|
|
+ bool flush_all = (wbc->sync_mode == WB_SYNC_ALL || gfs2_is_jdata(ip));
|
|
|
|
|
|
- if (wbc->sync_mode == WB_SYNC_ALL)
|
|
|
|
|
|
+ if (flush_all)
|
|
gfs2_log_flush(GFS2_SB(inode), ip->i_gl, NORMAL_FLUSH);
|
|
gfs2_log_flush(GFS2_SB(inode), ip->i_gl, NORMAL_FLUSH);
|
|
if (bdi->wb.dirty_exceeded)
|
|
if (bdi->wb.dirty_exceeded)
|
|
gfs2_ail1_flush(sdp, wbc);
|
|
gfs2_ail1_flush(sdp, wbc);
|
|
else
|
|
else
|
|
filemap_fdatawrite(metamapping);
|
|
filemap_fdatawrite(metamapping);
|
|
- if (wbc->sync_mode == WB_SYNC_ALL)
|
|
|
|
|
|
+ if (flush_all)
|
|
ret = filemap_fdatawait(metamapping);
|
|
ret = filemap_fdatawait(metamapping);
|
|
if (ret)
|
|
if (ret)
|
|
mark_inode_dirty_sync(inode);
|
|
mark_inode_dirty_sync(inode);
|