Index: linux-2.6/lib/radix-tree.c =================================================================== --- linux-2.6.orig/lib/radix-tree.c +++ linux-2.6/lib/radix-tree.c @@ -85,20 +85,18 @@ DEFINE_PER_CPU(struct radix_tree_preload static struct radix_tree_node * radix_tree_node_alloc(struct radix_tree_root *root) { - struct radix_tree_node *ret; - - ret = kmem_cache_alloc(radix_tree_node_cachep, root->gfp_mask); - if (ret == NULL && !(root->gfp_mask & __GFP_WAIT)) { - struct radix_tree_preload *rtp; + struct radix_tree_preload *rtp; - rtp = &__get_cpu_var(radix_tree_preloads); - if (rtp->nr) { - ret = rtp->nodes[rtp->nr - 1]; - rtp->nodes[rtp->nr - 1] = NULL; - rtp->nr--; - } + rtp = &__get_cpu_var(radix_tree_preloads); + if (rtp->nr) { + struct radix_tree_node *ret; + ret = rtp->nodes[rtp->nr - 1]; + rtp->nodes[rtp->nr - 1] = NULL; + rtp->nr--; + return ret; } - return ret; + + return kmem_cache_alloc(radix_tree_node_cachep, root->gfp_mask); } static void radix_tree_node_rcu_free(struct rcu_head *head)