]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
btrfs: fix stat blocks accounting
authorDavid Sterba <dsterba@suse.cz>
Sun, 20 Nov 2011 12:33:38 +0000 (07:33 -0500)
committerChris Mason <chris.mason@oracle.com>
Fri, 16 Dec 2011 19:39:23 +0000 (14:39 -0500)
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 <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
(cherry picked from commit fadc0d8be4dfca80f6c568bc5874931893c6709b)

fs/btrfs/inode.c

index 465eeb199bf3c71b7a57284be81e851b9653ff6c..c78b3a9f087e5d7757d07ea79503fafc8db9d167 100644 (file)
@@ -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;
 }