diff options
author | Geert Uytterhoeven <geert@linux-m68k.org> | 2013-11-14 14:32:18 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-15 09:32:23 +0900 |
commit | a99b7069aab8fc3fb4f26d15795dc280b52e38b1 (patch) | |
tree | aa9d2dde6d72e7c5dc1e8ba58cc7da9561f83b55 /block/blk-ioc.c | |
parent | 498d319bb512992ef0784c278fa03679f2f5649d (diff) | |
download | op-kernel-dev-a99b7069aab8fc3fb4f26d15795dc280b52e38b1.zip op-kernel-dev-a99b7069aab8fc3fb4f26d15795dc280b52e38b1.tar.gz |
hfsplus: Fix undefined __divdi3 in hfsplus_init_header_node()
ERROR: "__divdi3" [fs/hfsplus/hfsplus.ko] undefined!
Introduced by commit 099e9245e04d ("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: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Vyacheslav Dubeyko <slava@dubeyko.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'block/blk-ioc.c')
0 files changed, 0 insertions, 0 deletions