mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 06:04:23 +08:00
ext4: flush journal when switching from data=journal mode
It's necessary to flush the journal when switching away from data=journal mode. This is because there are no revoke records when data blocks are journalled, but revoke records are required in the other journal modes. However, it is not necessary to flush the journal when switching into data=journal mode, and flushing the journal is expensive. So let's avoid it in that case. Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
parent
2aff57b0c0
commit
5872ddaaf0
@ -4660,7 +4660,6 @@ int ext4_change_inode_journal_flag(struct inode *inode, int val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
jbd2_journal_lock_updates(journal);
|
jbd2_journal_lock_updates(journal);
|
||||||
jbd2_journal_flush(journal);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OK, there are no updates running now, and all cached data is
|
* OK, there are no updates running now, and all cached data is
|
||||||
@ -4672,8 +4671,10 @@ int ext4_change_inode_journal_flag(struct inode *inode, int val)
|
|||||||
|
|
||||||
if (val)
|
if (val)
|
||||||
ext4_set_inode_flag(inode, EXT4_INODE_JOURNAL_DATA);
|
ext4_set_inode_flag(inode, EXT4_INODE_JOURNAL_DATA);
|
||||||
else
|
else {
|
||||||
|
jbd2_journal_flush(journal);
|
||||||
ext4_clear_inode_flag(inode, EXT4_INODE_JOURNAL_DATA);
|
ext4_clear_inode_flag(inode, EXT4_INODE_JOURNAL_DATA);
|
||||||
|
}
|
||||||
ext4_set_aops(inode);
|
ext4_set_aops(inode);
|
||||||
|
|
||||||
jbd2_journal_unlock_updates(journal);
|
jbd2_journal_unlock_updates(journal);
|
||||||
|
Loading…
Reference in New Issue
Block a user