diff options
-rw-r--r-- | fs/ext4/balloc.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index bd2ece228827..b9821be709bd 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c | |||
@@ -568,8 +568,16 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode, | |||
568 | 568 | ||
569 | /* this isn't the right place to decide whether block is metadata | 569 | /* this isn't the right place to decide whether block is metadata |
570 | * inode.c/extents.c knows better, but for safety ... */ | 570 | * inode.c/extents.c knows better, but for safety ... */ |
571 | if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode) || | 571 | if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) |
572 | ext4_should_journal_data(inode)) | 572 | metadata = 1; |
573 | |||
574 | /* We need to make sure we don't reuse | ||
575 | * block released untill the transaction commit. | ||
576 | * writeback mode have weak data consistency so | ||
577 | * don't force data as metadata when freeing block | ||
578 | * for writeback mode. | ||
579 | */ | ||
580 | if (metadata == 0 && !ext4_should_writeback_data(inode)) | ||
573 | metadata = 1; | 581 | metadata = 1; |
574 | 582 | ||
575 | sb = inode->i_sb; | 583 | sb = inode->i_sb; |