• A
    [PATCH] ext4 64 bit divide fix · f4e5bc24
    Andrew Morton 提交于
    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: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    f4e5bc24
super.c 78.0 KB