summaryrefslogtreecommitdiffstats
path: root/lib/radix-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/radix-tree.c')
-rw-r--r--lib/radix-tree.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/lib/radix-tree.c b/lib/radix-tree.c
index a904a8ddd174..b6c0e7f3a894 100644
--- a/lib/radix-tree.c
+++ b/lib/radix-tree.c
@@ -340,14 +340,12 @@ static void dump_ida_node(void *entry, unsigned long index)
340 for (i = 0; i < RADIX_TREE_MAP_SIZE; i++) 340 for (i = 0; i < RADIX_TREE_MAP_SIZE; i++)
341 dump_ida_node(node->slots[i], 341 dump_ida_node(node->slots[i],
342 index | (i << node->shift)); 342 index | (i << node->shift));
343 } else if (radix_tree_exceptional_entry(entry)) { 343 } else if (xa_is_value(entry)) {
344 pr_debug("ida excp: %p offset %d indices %lu-%lu data %lx\n", 344 pr_debug("ida excp: %p offset %d indices %lu-%lu data %lx\n",
345 entry, (int)(index & RADIX_TREE_MAP_MASK), 345 entry, (int)(index & RADIX_TREE_MAP_MASK),
346 index * IDA_BITMAP_BITS, 346 index * IDA_BITMAP_BITS,
347 index * IDA_BITMAP_BITS + BITS_PER_LONG - 347 index * IDA_BITMAP_BITS + BITS_PER_XA_VALUE,
348 RADIX_TREE_EXCEPTIONAL_SHIFT, 348 xa_to_value(entry));
349 (unsigned long)entry >>
350 RADIX_TREE_EXCEPTIONAL_SHIFT);
351 } else { 349 } else {
352 struct ida_bitmap *bitmap = entry; 350 struct ida_bitmap *bitmap = entry;
353 351
@@ -656,7 +654,7 @@ static int radix_tree_extend(struct radix_tree_root *root, gfp_t gfp,
656 BUG_ON(shift > BITS_PER_LONG); 654 BUG_ON(shift > BITS_PER_LONG);
657 if (radix_tree_is_internal_node(entry)) { 655 if (radix_tree_is_internal_node(entry)) {
658 entry_to_node(entry)->parent = node; 656 entry_to_node(entry)->parent = node;
659 } else if (radix_tree_exceptional_entry(entry)) { 657 } else if (xa_is_value(entry)) {
660 /* Moving an exceptional root->rnode to a node */ 658 /* Moving an exceptional root->rnode to a node */
661 node->exceptional = 1; 659 node->exceptional = 1;
662 } 660 }
@@ -955,12 +953,12 @@ static inline int insert_entries(struct radix_tree_node *node,
955 !is_sibling_entry(node, old) && 953 !is_sibling_entry(node, old) &&
956 (old != RADIX_TREE_RETRY)) 954 (old != RADIX_TREE_RETRY))
957 radix_tree_free_nodes(old); 955 radix_tree_free_nodes(old);
958 if (radix_tree_exceptional_entry(old)) 956 if (xa_is_value(old))
959 node->exceptional--; 957 node->exceptional--;
960 } 958 }
961 if (node) { 959 if (node) {
962 node->count += n; 960 node->count += n;
963 if (radix_tree_exceptional_entry(item)) 961 if (xa_is_value(item))
964 node->exceptional += n; 962 node->exceptional += n;
965 } 963 }
966 return n; 964 return n;
@@ -974,7 +972,7 @@ static inline int insert_entries(struct radix_tree_node *node,
974 rcu_assign_pointer(*slot, item); 972 rcu_assign_pointer(*slot, item);
975 if (node) { 973 if (node) {
976 node->count++; 974 node->count++;
977 if (radix_tree_exceptional_entry(item)) 975 if (xa_is_value(item))
978 node->exceptional++; 976 node->exceptional++;
979 } 977 }
980 return 1; 978 return 1;
@@ -1190,8 +1188,7 @@ void __radix_tree_replace(struct radix_tree_root *root,
1190 radix_tree_update_node_t update_node) 1188 radix_tree_update_node_t update_node)
1191{ 1189{
1192 void *old = rcu_dereference_raw(*slot); 1190 void *old = rcu_dereference_raw(*slot);
1193 int exceptional = !!radix_tree_exceptional_entry(item) - 1191 int exceptional = !!xa_is_value(item) - !!xa_is_value(old);
1194 !!radix_tree_exceptional_entry(old);
1195 int count = calculate_count(root, node, slot, item, old); 1192 int count = calculate_count(root, node, slot, item, old);
1196 1193
1197 /* 1194 /*
@@ -1992,7 +1989,7 @@ static bool __radix_tree_delete(struct radix_tree_root *root,
1992 struct radix_tree_node *node, void __rcu **slot) 1989 struct radix_tree_node *node, void __rcu **slot)
1993{ 1990{
1994 void *old = rcu_dereference_raw(*slot); 1991 void *old = rcu_dereference_raw(*slot);
1995 int exceptional = radix_tree_exceptional_entry(old) ? -1 : 0; 1992 int exceptional = xa_is_value(old) ? -1 : 0;
1996 unsigned offset = get_slot_offset(node, slot); 1993 unsigned offset = get_slot_offset(node, slot);
1997 int tag; 1994 int tag;
1998 1995