diff options
Diffstat (limited to 'lib/radix-tree.c')
-rw-r--r-- | lib/radix-tree.c | 21 |
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 | ||