diff options
author | Theodore Ts'o <tytso@mit.edu> | 2009-07-08 17:11:24 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2009-07-08 17:11:24 -0400 |
commit | 5adfee9c17314c1411095c23191c3cb0c2d25f9f (patch) | |
tree | 67b9d406ffd6d72c3c0a02f599ea97c6fd8780ef | |
parent | 5887e98b609e96ce61ee0528cf94a2bfdc809dd7 (diff) |
ext4: fix no journal corruption with locale-gen
If there is no journal, ext4_should_writeback_data() should return
TRUE. This will fix ext4_set_aops() to set ext4_da_ops in the case of
delayed allocation; otherwise ext4_journaled_aops gets used by
default, which doesn't handle delayed allocation properly.
The advantage of using ext4_should_writeback_data() approach is that
it should handle nobh better as well.
Thanks to Curt Wohlgemuth for investigating this problem, and Aneesh
Kumar for suggesting this approach.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r-- | fs/ext4/ext4_jbd2.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h index be2f426f6805..d574a85aca56 100644 --- a/fs/ext4/ext4_jbd2.h +++ b/fs/ext4/ext4_jbd2.h | |||
@@ -281,10 +281,10 @@ static inline int ext4_should_order_data(struct inode *inode) | |||
281 | 281 | ||
282 | static inline int ext4_should_writeback_data(struct inode *inode) | 282 | static inline int ext4_should_writeback_data(struct inode *inode) |
283 | { | 283 | { |
284 | if (EXT4_JOURNAL(inode) == NULL) | ||
285 | return 0; | ||
286 | if (!S_ISREG(inode->i_mode)) | 284 | if (!S_ISREG(inode->i_mode)) |
287 | return 0; | 285 | return 0; |
286 | if (EXT4_JOURNAL(inode) == NULL) | ||
287 | return 1; | ||
288 | if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) | 288 | if (EXT4_I(inode)->i_flags & EXT4_JOURNAL_DATA_FL) |
289 | return 0; | 289 | return 0; |
290 | if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) | 290 | if (test_opt(inode->i_sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA) |