]> git.neil.brown.name Git - LaFS.git/commitdiff
Fix some more left-shift-overflow issues.
authorNeilBrown <neilb@suse.de>
Sat, 3 Jul 2010 00:50:17 +0000 (10:50 +1000)
committerNeilBrown <neilb@suse.de>
Sat, 3 Jul 2010 00:51:27 +0000 (10:51 +1000)
We need to cast before shifting sometimes.

Signed-off-by: NeilBrown <neilb@suse.de>
dir.c
inode.c
summary.c

diff --git a/dir.c b/dir.c
index 5ed82f07adca2e49574935fcb2e4ac79a29cb6db..1ab2ec910a8a29ab5bc88140b9aea6772725cc5f 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -321,8 +321,9 @@ dir_create_commit(struct dirop_handle *doh,
                kfree(doh->temp);
                doh->temp = NULL;
                lafs_dirty_dblock(doh->new);
-               if (((doh->new->b.fileaddr+1) << dir->i_blkbits) > dir->i_size) {
-                       i_size_write(dir, ((doh->new->b.fileaddr+1)
+               if ((((loff_t)doh->new->b.fileaddr+1) << dir->i_blkbits)
+                   > dir->i_size) {
+                       i_size_write(dir, (((loff_t)doh->new->b.fileaddr+1)
                                           << dir->i_blkbits));
                        lafs_dirty_inode(dir);
                }
diff --git a/inode.c b/inode.c
index f539487e20a35180cef67522b4a265adea0af62b..20d8235fa30d2b68dcfd9d5a0e245247e6ed7599 100644 (file)
--- a/inode.c
+++ b/inode.c
@@ -115,7 +115,8 @@ lafs_import_inode(struct inode *ino, struct datablock *b)
        li->filesys = b->b.inode;
        li->cblocks = le32_to_cpu(lai->data_blocks);
        li->pblocks = li->ablocks = 0;
-       li->vfs_inode.i_blocks = li->cblocks << ino->i_sb->s_blocksize_bits;
+       li->vfs_inode.i_blocks = ((blkcnt_t)li->cblocks
+                                 << (ino->i_sb->s_blocksize_bits - 9));
        li->ciblocks = le32_to_cpu(lai->index_blocks);
        li->piblocks = 0;
        li->iflags = 0;
index c2fe6b4142787e8b65f928de9c4e7cf3c8568557..1a49a1ef812dac0a58816b98d8267535b91db113 100644 (file)
--- a/summary.c
+++ b/summary.c
@@ -114,7 +114,7 @@ int lafs_summary_allocate(struct fs *fs, struct inode *ino, int diff)
        lai = LAFSI(ino);
        spin_lock(&ino->i_lock);
        lai->ablocks += diff;
-       ino->i_blocks += diff << (fs->prime_sb->s_blocksize_bits - 9) ;
+       ino->i_blocks += (blkcnt_t)diff << (fs->prime_sb->s_blocksize_bits - 9) ;
        spin_unlock(&ino->i_lock);
 
        return 0;