| From 8612c1f51598a672b35ecff9143213b8149fe996 Mon Sep 17 00:00:00 2001 |
| From: Theodore Ts'o <tytso@mit.edu> |
| Date: Thu, 17 Sep 2009 09:34:16 -0400 |
| Subject: [PATCH 38/85] ext4: Fix the alloc on close after a truncate hueristic |
| |
| (cherry picked from commit 5534fb5bb35a62a94e0bd1fa2421f7fb6e894f10) |
| |
| In an attempt to avoid doing an unneeded flush after opening a |
| (previously non-existent) file with O_CREAT|O_TRUNC, the code only |
| triggered the hueristic if ei->disksize was non-zero. Turns out that |
| the VFS doesn't call ->truncate() if the file doesn't exist, and |
| ei->disksize is always zero even if the file previously existed. So |
| remove the test, since it isn't necessary and in fact disabled the |
| hueristic. |
| |
| Thanks to Clemens Eisserer that he was seeing problems with files |
| written using kwrite and eclipse after sudden crashes caused by a |
| buggy Intel video driver. |
| |
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| fs/ext4/inode.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| --- a/fs/ext4/inode.c |
| +++ b/fs/ext4/inode.c |
| @@ -3983,8 +3983,7 @@ void ext4_truncate(struct inode *inode) |
| if (!ext4_can_truncate(inode)) |
| return; |
| |
| - if (ei->i_disksize && inode->i_size == 0 && |
| - !test_opt(inode->i_sb, NO_AUTO_DA_ALLOC)) |
| + if (inode->i_size == 0 && !test_opt(inode->i_sb, NO_AUTO_DA_ALLOC)) |
| ei->i_state |= EXT4_STATE_DA_ALLOC_CLOSE; |
| |
| if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) { |