Skip to content
  • Geert Uytterhoeven's avatar
    hfsplus: Fix undefined __divdi3 in hfsplus_init_header_node() · a99b7069
    Geert Uytterhoeven authored
    ERROR: "__divdi3" [fs/hfsplus/hfsplus.ko] undefined!
    
    Introduced by commit 099e9245
    
     ("hfsplus: implement attributes file's
    header node initialization code").
    
    i_size_read() returns loff_t, which is long long, i.e.  64-bit.  node_size
    is size_t, which is either 32-bit or 64-bit.  Hence
    "i_size_read(attr_file) / node_size" is a 64-by-32 or 64-by-64 division,
    causing (some versions of) gcc to emit a call to __divdi3().
    
    Fortunately node_size is actually 16-bit, as the sole caller of
    hfsplus_init_header_node() passes a u16.  Hence change its type from
    size_t to u16, and use do_div() to perform a 64-by-32 division.
    
    Not seen in m68k/allmodconfig in -next, so it really depends on the
    verion of gcc.
    
    Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
    Cc: Vyacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a99b7069