aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTao Ma <boyu.mt@taobao.com>2012-05-31 22:54:16 -0400
committerTheodore Ts'o <tytso@mit.edu>2012-05-31 22:54:16 -0400
commit9660755100ae7677d65772a28e16d475a2ee9eab (patch)
treeb7192f775c46add4ad1b96d8c766ce236aec872f
parentext4: add missing save_error_info() to ext4_error() (diff)
downloadlinux-dev-9660755100ae7677d65772a28e16d475a2ee9eab.tar.xz
linux-dev-9660755100ae7677d65772a28e16d475a2ee9eab.zip
ext4: let getattr report the right blocks in delalloc+bigalloc
In delayed allocation, i_reserved_data_blocks now indicates clusters, not blocks. So report it in the right number. This can be easily exposed by the following command: echo foo > blah; du -hc blah; sync; du -hc blah Reported-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: Tao Ma <boyu.mt@taobao.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r--fs/ext4/inode.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 7bccdf32a32c..fc083e87c231 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4301,7 +4301,8 @@ int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
* will return the blocks that include the delayed allocation
* blocks for this file.
*/
- delalloc_blocks = EXT4_I(inode)->i_reserved_data_blocks;
+ delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb),
+ EXT4_I(inode)->i_reserved_data_blocks);
stat->blocks += (delalloc_blocks << inode->i_sb->s_blocksize_bits)>>9;
return 0;