From: David Sterba Date: Sun, 20 Nov 2011 12:33:38 +0000 (-0500) Subject: btrfs: fix stat blocks accounting X-Git-Tag: v2.6.39-400.9.0~824^2~36 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7c39cf2f3d8519abfe1f5e62fd902be5847ff44b;p=users%2Fjedix%2Flinux-maple.git btrfs: fix stat blocks accounting Round inode bytes and delalloc bytes up to real blocksize before converting to sector size. Otherwise eg. files smaller than 512 are reported with zero blocks due to incorrect rounding. Signed-off-by: David Sterba Signed-off-by: Chris Mason (cherry picked from commit fadc0d8be4dfca80f6c568bc5874931893c6709b) --- diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 465eeb199bf3..c78b3a9f087e 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -6750,11 +6750,13 @@ static int btrfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) { struct inode *inode = dentry->d_inode; + u32 blocksize = inode->i_sb->s_blocksize; + generic_fillattr(inode, stat); stat->dev = BTRFS_I(inode)->root->anon_dev; stat->blksize = PAGE_CACHE_SIZE; - stat->blocks = (inode_get_bytes(inode) + - BTRFS_I(inode)->delalloc_bytes) >> 9; + stat->blocks = (ALIGN(inode_get_bytes(inode), blocksize) + + ALIGN(BTRFS_I(inode)->delalloc_bytes, blocksize)) >> 9; return 0; }