]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - fs/ext4/balloc.c
ext4: Don't reuse released data blocks until transaction commits
[net-next-2.6.git] / fs / ext4 / balloc.c
index bd2ece22882755b02599563a1bee89c5b10d2b87..b9821be709bddb000077b9a4b15efe34e9392bd0 100644 (file)
@@ -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;