@@ -3546,7 +3546,6 @@ int ext3_change_inode_journal_flag(struct inode *inode, int val)
return -EROFS;
journal_lock_updates(journal);
- journal_flush(journal);
/*
* OK, there are no updates running now, and all cached data is
@@ -3556,10 +3555,12 @@ int ext3_change_inode_journal_flag(struct inode *inode, int val)
* the inode's in-core data-journaling state flag now.
*/
- if (val)
+ if (val) {
EXT3_I(inode)->i_flags |= EXT3_JOURNAL_DATA_FL;
- else
+ } else {
+ journal_flush(journal);
EXT3_I(inode)->i_flags &= ~EXT3_JOURNAL_DATA_FL;
+ }
ext3_set_aops(inode);
journal_unlock_updates(journal);
To prevent data from corruption during repaly, we need to flush journal before changing journal mode from journaled. However flushing journal is not needed when changing journal to journaled. Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com> --- fs/ext3/inode.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-)