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; |
