X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fradix-tree.c;h=48c250fe2233d82c6d8fd563e83c234cdf1109ee;hb=b95d58eaf20eb33c245a2172ec4ecf46bd832309;hp=6b26f9d3980079a8d889e8d57859ce9a7cbb89bd;hpb=5cae826e9e54a31f06b4c11b73f4af29e2ea4932;p=linux-2.6 diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 6b26f9d398..48c250fe22 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c @@ -1042,19 +1042,21 @@ int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag) EXPORT_SYMBOL(radix_tree_tagged); static void -radix_tree_node_ctor(void *node, struct kmem_cache *cachep, unsigned long flags) +radix_tree_node_ctor(struct kmem_cache *cachep, void *node) { memset(node, 0, sizeof(struct radix_tree_node)); } static __init unsigned long __maxindex(unsigned int height) { - unsigned int tmp = height * RADIX_TREE_MAP_SHIFT; - unsigned long index = (~0UL >> (RADIX_TREE_INDEX_BITS - tmp - 1)) >> 1; - - if (tmp >= RADIX_TREE_INDEX_BITS) - index = ~0UL; - return index; + unsigned int width = height * RADIX_TREE_MAP_SHIFT; + int shift = RADIX_TREE_INDEX_BITS - width; + + if (shift < 0) + return ~0UL; + if (shift >= BITS_PER_LONG) + return 0UL; + return ~0UL >> shift; } static __init void radix_tree_init_maxindex(void)