]> Pileus Git - ~andy/linux/blobdiff - fs/ext4/inode.c
ext4: fix overflow when counting used blocks on 32-bit architectures
[~andy/linux] / fs / ext4 / inode.c
index 0fca5a8c6d3e70fb4b7f3afc8088cbf203fcbc11..38f03dcdc8be37478be15b3dbaf253bc2632a902 100644 (file)
@@ -4702,7 +4702,7 @@ int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
                 struct kstat *stat)
 {
        struct inode *inode;
-       unsigned long delalloc_blocks;
+       unsigned long long delalloc_blocks;
 
        inode = dentry->d_inode;
        generic_fillattr(inode, stat);
@@ -4720,7 +4720,7 @@ int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
        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;
+       stat->blocks += delalloc_blocks << (inode->i_sb->s_blocksize_bits-9);
        return 0;
 }