diff options
Diffstat (limited to 'lib/radix-tree.c')
-rw-r--r-- | lib/radix-tree.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 66c71312c381..dcb9a2329e65 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c | |||
@@ -374,6 +374,7 @@ static void ida_dump(struct ida *ida) | |||
374 | */ | 374 | */ |
375 | static struct radix_tree_node * | 375 | static struct radix_tree_node * |
376 | radix_tree_node_alloc(gfp_t gfp_mask, struct radix_tree_node *parent, | 376 | radix_tree_node_alloc(gfp_t gfp_mask, struct radix_tree_node *parent, |
377 | struct radix_tree_root *root, | ||
377 | unsigned int shift, unsigned int offset, | 378 | unsigned int shift, unsigned int offset, |
378 | unsigned int count, unsigned int exceptional) | 379 | unsigned int count, unsigned int exceptional) |
379 | { | 380 | { |
@@ -419,11 +420,12 @@ radix_tree_node_alloc(gfp_t gfp_mask, struct radix_tree_node *parent, | |||
419 | out: | 420 | out: |
420 | BUG_ON(radix_tree_is_internal_node(ret)); | 421 | BUG_ON(radix_tree_is_internal_node(ret)); |
421 | if (ret) { | 422 | if (ret) { |
422 | ret->parent = parent; | ||
423 | ret->shift = shift; | 423 | ret->shift = shift; |
424 | ret->offset = offset; | 424 | ret->offset = offset; |
425 | ret->count = count; | 425 | ret->count = count; |
426 | ret->exceptional = exceptional; | 426 | ret->exceptional = exceptional; |
427 | ret->parent = parent; | ||
428 | ret->root = root; | ||
427 | } | 429 | } |
428 | return ret; | 430 | return ret; |
429 | } | 431 | } |
@@ -631,7 +633,7 @@ static int radix_tree_extend(struct radix_tree_root *root, gfp_t gfp, | |||
631 | 633 | ||
632 | do { | 634 | do { |
633 | struct radix_tree_node *node = radix_tree_node_alloc(gfp, NULL, | 635 | struct radix_tree_node *node = radix_tree_node_alloc(gfp, NULL, |
634 | shift, 0, 1, 0); | 636 | root, shift, 0, 1, 0); |
635 | if (!node) | 637 | if (!node) |
636 | return -ENOMEM; | 638 | return -ENOMEM; |
637 | 639 | ||
@@ -828,7 +830,7 @@ int __radix_tree_create(struct radix_tree_root *root, unsigned long index, | |||
828 | shift -= RADIX_TREE_MAP_SHIFT; | 830 | shift -= RADIX_TREE_MAP_SHIFT; |
829 | if (child == NULL) { | 831 | if (child == NULL) { |
830 | /* Have to add a child node. */ | 832 | /* Have to add a child node. */ |
831 | child = radix_tree_node_alloc(gfp, node, shift, | 833 | child = radix_tree_node_alloc(gfp, node, root, shift, |
832 | offset, 0, 0); | 834 | offset, 0, 0); |
833 | if (!child) | 835 | if (!child) |
834 | return -ENOMEM; | 836 | return -ENOMEM; |
@@ -1330,7 +1332,7 @@ int radix_tree_split(struct radix_tree_root *root, unsigned long index, | |||
1330 | 1332 | ||
1331 | for (;;) { | 1333 | for (;;) { |
1332 | if (node->shift > order) { | 1334 | if (node->shift > order) { |
1333 | child = radix_tree_node_alloc(gfp, node, | 1335 | child = radix_tree_node_alloc(gfp, node, root, |
1334 | node->shift - RADIX_TREE_MAP_SHIFT, | 1336 | node->shift - RADIX_TREE_MAP_SHIFT, |
1335 | offset, 0, 0); | 1337 | offset, 0, 0); |
1336 | if (!child) | 1338 | if (!child) |
@@ -2152,8 +2154,8 @@ void **idr_get_free(struct radix_tree_root *root, | |||
2152 | shift -= RADIX_TREE_MAP_SHIFT; | 2154 | shift -= RADIX_TREE_MAP_SHIFT; |
2153 | if (child == NULL) { | 2155 | if (child == NULL) { |
2154 | /* Have to add a child node. */ | 2156 | /* Have to add a child node. */ |
2155 | child = radix_tree_node_alloc(gfp, node, shift, offset, | 2157 | child = radix_tree_node_alloc(gfp, node, root, shift, |
2156 | 0, 0); | 2158 | offset, 0, 0); |
2157 | if (!child) | 2159 | if (!child) |
2158 | return ERR_PTR(-ENOMEM); | 2160 | return ERR_PTR(-ENOMEM); |
2159 | all_tag_set(child, IDR_FREE); | 2161 | all_tag_set(child, IDR_FREE); |