mirror of https://gitee.com/openkylin/linux.git
ext4: Don't reuse released data blocks until transaction commits
We need to make sure we don't reuse the data blocks released during the transaction untill the transaction commits. We force this mode only for ordered and journalled mode. Writeback mode already don't provided data consistency. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
c894058d66
commit
a1aebc1e2d
|
@ -568,8 +568,16 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode,
|
|||
|
||||
/* this isn't the right place to decide whether block is metadata
|
||||
* inode.c/extents.c knows better, but for safety ... */
|
||||
if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode) ||
|
||||
ext4_should_journal_data(inode))
|
||||
if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))
|
||||
metadata = 1;
|
||||
|
||||
/* We need to make sure we don't reuse
|
||||
* block released untill the transaction commit.
|
||||
* writeback mode have weak data consistency so
|
||||
* don't force data as metadata when freeing block
|
||||
* for writeback mode.
|
||||
*/
|
||||
if (metadata == 0 && !ext4_should_writeback_data(inode))
|
||||
metadata = 1;
|
||||
|
||||
sb = inode->i_sb;
|
||||
|
|
Loading…
Reference in New Issue