From 1995eae53ca95e0f53f094cee74f1e6267e4e6e2 Mon Sep 17 00:00:00 2001 From: "Aneesh Kumar K.V" Date: Fri, 10 Oct 2008 20:13:31 -0400 Subject: [PATCH] --- yaml --- r: 115580 b: refs/heads/master c: a1aebc1e2da9a7bee4ff8cce510b08f469d1929e h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/ext4/balloc.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index bc4e2f13ddc7..a6b1bfddd349 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c894058d66637c7720569fbe12957f4de64d9991 +refs/heads/master: a1aebc1e2da9a7bee4ff8cce510b08f469d1929e diff --git a/trunk/fs/ext4/balloc.c b/trunk/fs/ext4/balloc.c index bd2ece228827..b9821be709bd 100644 --- a/trunk/fs/ext4/balloc.c +++ b/trunk/fs/ext4/balloc.c @@ -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;