summaryrefslogtreecommitdiff
path: root/fs/ext4/super.c
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2006-10-11 01:21:19 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-11 11:14:18 -0700
commitf4e5bc244f23ee024a4dfa034b591b219b2bfb8f (patch)
treedf0cb1469de20ae9706a671ab8e9b049e1d93f63 /fs/ext4/super.c
parent72b64b594081ef0a0717f6aad77e891c72ed4afa (diff)
downloadlinux-3.10-f4e5bc244f23ee024a4dfa034b591b219b2bfb8f.tar.gz
linux-3.10-f4e5bc244f23ee024a4dfa034b591b219b2bfb8f.tar.bz2
linux-3.10-f4e5bc244f23ee024a4dfa034b591b219b2bfb8f.zip
[PATCH] ext4 64 bit divide fix
With CONFIG_LBD=n, sector_div() expands to a plain old divide. But ext4 is _not_ passing in a sector_t as the first argument, so... fs/built-in.o: In function `ext4_get_group_no_and_offset': fs/ext4/balloc.c:39: undefined reference to `__umoddi3' fs/ext4/balloc.c:41: undefined reference to `__udivdi3' fs/built-in.o: In function `find_group_orlov': fs/ext4/ialloc.c:278: undefined reference to `__udivdi3' fs/built-in.o: In function `ext4_fill_super': fs/ext4/super.c:1488: undefined reference to `__udivdi3' fs/ext4/super.c:1488: undefined reference to `__umoddi3' fs/ext4/super.c:1594: undefined reference to `__udivdi3' fs/ext4/super.c:1601: undefined reference to `__umoddi3' Fix that up by calling do_div() directly. Also cast the arg to u64. do_div() is only defined on u64, and ext4_fsblk_t is supposed to be opaque. Note especially the changes to find_group_orlov(). It was attempting to do do_div(int, unsigned long long); which is royally screwed up. Switched it to plain old divide. Cc: <linux-ext4@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/ext4/super.c')
-rw-r--r--fs/ext4/super.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 811011fc5c9..f7ea0224f53 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1485,7 +1485,7 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)
*/
if (blocksize != EXT4_MIN_BLOCK_SIZE) {
logic_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
- offset = sector_div(logic_sb_block, blocksize);
+ offset = do_div(logic_sb_block, blocksize);
} else {
logic_sb_block = sb_block;
}
@@ -1591,7 +1591,7 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)
brelse (bh);
sb_set_blocksize(sb, blocksize);
logic_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
- offset = sector_div(logic_sb_block, blocksize);
+ offset = do_div(logic_sb_block, blocksize);
bh = sb_bread(sb, logic_sb_block);
if (!bh) {
printk(KERN_ERR