These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / lib / radix-tree.c
1 /*
2  * Copyright (C) 2001 Momchil Velikov
3  * Portions Copyright (C) 2001 Christoph Hellwig
4  * Copyright (C) 2005 SGI, Christoph Lameter
5  * Copyright (C) 2006 Nick Piggin
6  * Copyright (C) 2012 Konstantin Khlebnikov
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2, or (at
11  * your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  */
22
23 #include <linux/errno.h>
24 #include <linux/init.h>
25 #include <linux/kernel.h>
26 #include <linux/export.h>
27 #include <linux/radix-tree.h>
28 #include <linux/percpu.h>
29 #include <linux/slab.h>
30 #include <linux/kmemleak.h>
31 #include <linux/notifier.h>
32 #include <linux/cpu.h>
33 #include <linux/string.h>
34 #include <linux/bitops.h>
35 #include <linux/rcupdate.h>
36 #include <linux/preempt.h>              /* in_interrupt() */
37
38
39 /*
40  * The height_to_maxindex array needs to be one deeper than the maximum
41  * path as height 0 holds only 1 entry.
42  */
43 static unsigned long height_to_maxindex[RADIX_TREE_MAX_PATH + 1] __read_mostly;
44
45 /*
46  * Radix tree node cache.
47  */
48 static struct kmem_cache *radix_tree_node_cachep;
49
50 /*
51  * The radix tree is variable-height, so an insert operation not only has
52  * to build the branch to its corresponding item, it also has to build the
53  * branch to existing items if the size has to be increased (by
54  * radix_tree_extend).
55  *
56  * The worst case is a zero height tree with just a single item at index 0,
57  * and then inserting an item at index ULONG_MAX. This requires 2 new branches
58  * of RADIX_TREE_MAX_PATH size to be created, with only the root node shared.
59  * Hence:
60  */
61 #define RADIX_TREE_PRELOAD_SIZE (RADIX_TREE_MAX_PATH * 2 - 1)
62
63 /*
64  * Per-cpu pool of preloaded nodes
65  */
66 struct radix_tree_preload {
67         int nr;
68         /* nodes->private_data points to next preallocated node */
69         struct radix_tree_node *nodes;
70 };
71 static DEFINE_PER_CPU(struct radix_tree_preload, radix_tree_preloads) = { 0, };
72
73 static inline void *ptr_to_indirect(void *ptr)
74 {
75         return (void *)((unsigned long)ptr | RADIX_TREE_INDIRECT_PTR);
76 }
77
78 static inline void *indirect_to_ptr(void *ptr)
79 {
80         return (void *)((unsigned long)ptr & ~RADIX_TREE_INDIRECT_PTR);
81 }
82
83 static inline gfp_t root_gfp_mask(struct radix_tree_root *root)
84 {
85         return root->gfp_mask & __GFP_BITS_MASK;
86 }
87
88 static inline void tag_set(struct radix_tree_node *node, unsigned int tag,
89                 int offset)
90 {
91         __set_bit(offset, node->tags[tag]);
92 }
93
94 static inline void tag_clear(struct radix_tree_node *node, unsigned int tag,
95                 int offset)
96 {
97         __clear_bit(offset, node->tags[tag]);
98 }
99
100 static inline int tag_get(struct radix_tree_node *node, unsigned int tag,
101                 int offset)
102 {
103         return test_bit(offset, node->tags[tag]);
104 }
105
106 static inline void root_tag_set(struct radix_tree_root *root, unsigned int tag)
107 {
108         root->gfp_mask |= (__force gfp_t)(1 << (tag + __GFP_BITS_SHIFT));
109 }
110
111 static inline void root_tag_clear(struct radix_tree_root *root, unsigned int tag)
112 {
113         root->gfp_mask &= (__force gfp_t)~(1 << (tag + __GFP_BITS_SHIFT));
114 }
115
116 static inline void root_tag_clear_all(struct radix_tree_root *root)
117 {
118         root->gfp_mask &= __GFP_BITS_MASK;
119 }
120
121 static inline int root_tag_get(struct radix_tree_root *root, unsigned int tag)
122 {
123         return (__force unsigned)root->gfp_mask & (1 << (tag + __GFP_BITS_SHIFT));
124 }
125
126 /*
127  * Returns 1 if any slot in the node has this tag set.
128  * Otherwise returns 0.
129  */
130 static inline int any_tag_set(struct radix_tree_node *node, unsigned int tag)
131 {
132         int idx;
133         for (idx = 0; idx < RADIX_TREE_TAG_LONGS; idx++) {
134                 if (node->tags[tag][idx])
135                         return 1;
136         }
137         return 0;
138 }
139
140 /**
141  * radix_tree_find_next_bit - find the next set bit in a memory region
142  *
143  * @addr: The address to base the search on
144  * @size: The bitmap size in bits
145  * @offset: The bitnumber to start searching at
146  *
147  * Unrollable variant of find_next_bit() for constant size arrays.
148  * Tail bits starting from size to roundup(size, BITS_PER_LONG) must be zero.
149  * Returns next bit offset, or size if nothing found.
150  */
151 static __always_inline unsigned long
152 radix_tree_find_next_bit(const unsigned long *addr,
153                          unsigned long size, unsigned long offset)
154 {
155         if (!__builtin_constant_p(size))
156                 return find_next_bit(addr, size, offset);
157
158         if (offset < size) {
159                 unsigned long tmp;
160
161                 addr += offset / BITS_PER_LONG;
162                 tmp = *addr >> (offset % BITS_PER_LONG);
163                 if (tmp)
164                         return __ffs(tmp) + offset;
165                 offset = (offset + BITS_PER_LONG) & ~(BITS_PER_LONG - 1);
166                 while (offset < size) {
167                         tmp = *++addr;
168                         if (tmp)
169                                 return __ffs(tmp) + offset;
170                         offset += BITS_PER_LONG;
171                 }
172         }
173         return size;
174 }
175
176 /*
177  * This assumes that the caller has performed appropriate preallocation, and
178  * that the caller has pinned this thread of control to the current CPU.
179  */
180 static struct radix_tree_node *
181 radix_tree_node_alloc(struct radix_tree_root *root)
182 {
183         struct radix_tree_node *ret = NULL;
184         gfp_t gfp_mask = root_gfp_mask(root);
185
186         /*
187          * Preload code isn't irq safe and it doesn't make sence to use
188          * preloading in the interrupt anyway as all the allocations have to
189          * be atomic. So just do normal allocation when in interrupt.
190          */
191         if (!gfpflags_allow_blocking(gfp_mask) && !in_interrupt()) {
192                 struct radix_tree_preload *rtp;
193
194                 /*
195                  * Provided the caller has preloaded here, we will always
196                  * succeed in getting a node here (and never reach
197                  * kmem_cache_alloc)
198                  */
199                 rtp = &get_cpu_var(radix_tree_preloads);
200                 if (rtp->nr) {
201                         ret = rtp->nodes;
202                         rtp->nodes = ret->private_data;
203                         ret->private_data = NULL;
204                         rtp->nr--;
205                 }
206                 put_cpu_var(radix_tree_preloads);
207                 /*
208                  * Update the allocation stack trace as this is more useful
209                  * for debugging.
210                  */
211                 kmemleak_update_trace(ret);
212         }
213         if (ret == NULL)
214                 ret = kmem_cache_alloc(radix_tree_node_cachep, gfp_mask);
215
216         BUG_ON(radix_tree_is_indirect_ptr(ret));
217         return ret;
218 }
219
220 static void radix_tree_node_rcu_free(struct rcu_head *head)
221 {
222         struct radix_tree_node *node =
223                         container_of(head, struct radix_tree_node, rcu_head);
224         int i;
225
226         /*
227          * must only free zeroed nodes into the slab. radix_tree_shrink
228          * can leave us with a non-NULL entry in the first slot, so clear
229          * that here to make sure.
230          */
231         for (i = 0; i < RADIX_TREE_MAX_TAGS; i++)
232                 tag_clear(node, i, 0);
233
234         node->slots[0] = NULL;
235         node->count = 0;
236
237         kmem_cache_free(radix_tree_node_cachep, node);
238 }
239
240 static inline void
241 radix_tree_node_free(struct radix_tree_node *node)
242 {
243         call_rcu(&node->rcu_head, radix_tree_node_rcu_free);
244 }
245
246 #ifndef CONFIG_PREEMPT_RT_FULL
247 /*
248  * Load up this CPU's radix_tree_node buffer with sufficient objects to
249  * ensure that the addition of a single element in the tree cannot fail.  On
250  * success, return zero, with preemption disabled.  On error, return -ENOMEM
251  * with preemption not disabled.
252  *
253  * To make use of this facility, the radix tree must be initialised without
254  * __GFP_DIRECT_RECLAIM being passed to INIT_RADIX_TREE().
255  */
256 static int __radix_tree_preload(gfp_t gfp_mask)
257 {
258         struct radix_tree_preload *rtp;
259         struct radix_tree_node *node;
260         int ret = -ENOMEM;
261
262         preempt_disable();
263         rtp = this_cpu_ptr(&radix_tree_preloads);
264         while (rtp->nr < RADIX_TREE_PRELOAD_SIZE) {
265                 preempt_enable();
266                 node = kmem_cache_alloc(radix_tree_node_cachep, gfp_mask);
267                 if (node == NULL)
268                         goto out;
269                 preempt_disable();
270                 rtp = this_cpu_ptr(&radix_tree_preloads);
271                 if (rtp->nr < RADIX_TREE_PRELOAD_SIZE) {
272                         node->private_data = rtp->nodes;
273                         rtp->nodes = node;
274                         rtp->nr++;
275                 } else {
276                         kmem_cache_free(radix_tree_node_cachep, node);
277                 }
278         }
279         ret = 0;
280 out:
281         return ret;
282 }
283
284 /*
285  * Load up this CPU's radix_tree_node buffer with sufficient objects to
286  * ensure that the addition of a single element in the tree cannot fail.  On
287  * success, return zero, with preemption disabled.  On error, return -ENOMEM
288  * with preemption not disabled.
289  *
290  * To make use of this facility, the radix tree must be initialised without
291  * __GFP_DIRECT_RECLAIM being passed to INIT_RADIX_TREE().
292  */
293 int radix_tree_preload(gfp_t gfp_mask)
294 {
295         /* Warn on non-sensical use... */
296         WARN_ON_ONCE(!gfpflags_allow_blocking(gfp_mask));
297         return __radix_tree_preload(gfp_mask);
298 }
299 EXPORT_SYMBOL(radix_tree_preload);
300
301 /*
302  * The same as above function, except we don't guarantee preloading happens.
303  * We do it, if we decide it helps. On success, return zero with preemption
304  * disabled. On error, return -ENOMEM with preemption not disabled.
305  */
306 int radix_tree_maybe_preload(gfp_t gfp_mask)
307 {
308         if (gfpflags_allow_blocking(gfp_mask))
309                 return __radix_tree_preload(gfp_mask);
310         /* Preloading doesn't help anything with this gfp mask, skip it */
311         preempt_disable();
312         return 0;
313 }
314 EXPORT_SYMBOL(radix_tree_maybe_preload);
315 #endif
316
317 /*
318  *      Return the maximum key which can be store into a
319  *      radix tree with height HEIGHT.
320  */
321 static inline unsigned long radix_tree_maxindex(unsigned int height)
322 {
323         return height_to_maxindex[height];
324 }
325
326 /*
327  *      Extend a radix tree so it can store key @index.
328  */
329 static int radix_tree_extend(struct radix_tree_root *root, unsigned long index)
330 {
331         struct radix_tree_node *node;
332         struct radix_tree_node *slot;
333         unsigned int height;
334         int tag;
335
336         /* Figure out what the height should be.  */
337         height = root->height + 1;
338         while (index > radix_tree_maxindex(height))
339                 height++;
340
341         if (root->rnode == NULL) {
342                 root->height = height;
343                 goto out;
344         }
345
346         do {
347                 unsigned int newheight;
348                 if (!(node = radix_tree_node_alloc(root)))
349                         return -ENOMEM;
350
351                 /* Propagate the aggregated tag info into the new root */
352                 for (tag = 0; tag < RADIX_TREE_MAX_TAGS; tag++) {
353                         if (root_tag_get(root, tag))
354                                 tag_set(node, tag, 0);
355                 }
356
357                 /* Increase the height.  */
358                 newheight = root->height+1;
359                 BUG_ON(newheight & ~RADIX_TREE_HEIGHT_MASK);
360                 node->path = newheight;
361                 node->count = 1;
362                 node->parent = NULL;
363                 slot = root->rnode;
364                 if (newheight > 1) {
365                         slot = indirect_to_ptr(slot);
366                         slot->parent = node;
367                 }
368                 node->slots[0] = slot;
369                 node = ptr_to_indirect(node);
370                 rcu_assign_pointer(root->rnode, node);
371                 root->height = newheight;
372         } while (height > root->height);
373 out:
374         return 0;
375 }
376
377 /**
378  *      __radix_tree_create     -       create a slot in a radix tree
379  *      @root:          radix tree root
380  *      @index:         index key
381  *      @nodep:         returns node
382  *      @slotp:         returns slot
383  *
384  *      Create, if necessary, and return the node and slot for an item
385  *      at position @index in the radix tree @root.
386  *
387  *      Until there is more than one item in the tree, no nodes are
388  *      allocated and @root->rnode is used as a direct slot instead of
389  *      pointing to a node, in which case *@nodep will be NULL.
390  *
391  *      Returns -ENOMEM, or 0 for success.
392  */
393 int __radix_tree_create(struct radix_tree_root *root, unsigned long index,
394                         struct radix_tree_node **nodep, void ***slotp)
395 {
396         struct radix_tree_node *node = NULL, *slot;
397         unsigned int height, shift, offset;
398         int error;
399
400         /* Make sure the tree is high enough.  */
401         if (index > radix_tree_maxindex(root->height)) {
402                 error = radix_tree_extend(root, index);
403                 if (error)
404                         return error;
405         }
406
407         slot = indirect_to_ptr(root->rnode);
408
409         height = root->height;
410         shift = (height-1) * RADIX_TREE_MAP_SHIFT;
411
412         offset = 0;                     /* uninitialised var warning */
413         while (height > 0) {
414                 if (slot == NULL) {
415                         /* Have to add a child node.  */
416                         if (!(slot = radix_tree_node_alloc(root)))
417                                 return -ENOMEM;
418                         slot->path = height;
419                         slot->parent = node;
420                         if (node) {
421                                 rcu_assign_pointer(node->slots[offset], slot);
422                                 node->count++;
423                                 slot->path |= offset << RADIX_TREE_HEIGHT_SHIFT;
424                         } else
425                                 rcu_assign_pointer(root->rnode, ptr_to_indirect(slot));
426                 }
427
428                 /* Go a level down */
429                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
430                 node = slot;
431                 slot = node->slots[offset];
432                 shift -= RADIX_TREE_MAP_SHIFT;
433                 height--;
434         }
435
436         if (nodep)
437                 *nodep = node;
438         if (slotp)
439                 *slotp = node ? node->slots + offset : (void **)&root->rnode;
440         return 0;
441 }
442
443 /**
444  *      radix_tree_insert    -    insert into a radix tree
445  *      @root:          radix tree root
446  *      @index:         index key
447  *      @item:          item to insert
448  *
449  *      Insert an item into the radix tree at position @index.
450  */
451 int radix_tree_insert(struct radix_tree_root *root,
452                         unsigned long index, void *item)
453 {
454         struct radix_tree_node *node;
455         void **slot;
456         int error;
457
458         BUG_ON(radix_tree_is_indirect_ptr(item));
459
460         error = __radix_tree_create(root, index, &node, &slot);
461         if (error)
462                 return error;
463         if (*slot != NULL)
464                 return -EEXIST;
465         rcu_assign_pointer(*slot, item);
466
467         if (node) {
468                 node->count++;
469                 BUG_ON(tag_get(node, 0, index & RADIX_TREE_MAP_MASK));
470                 BUG_ON(tag_get(node, 1, index & RADIX_TREE_MAP_MASK));
471         } else {
472                 BUG_ON(root_tag_get(root, 0));
473                 BUG_ON(root_tag_get(root, 1));
474         }
475
476         return 0;
477 }
478 EXPORT_SYMBOL(radix_tree_insert);
479
480 /**
481  *      __radix_tree_lookup     -       lookup an item in a radix tree
482  *      @root:          radix tree root
483  *      @index:         index key
484  *      @nodep:         returns node
485  *      @slotp:         returns slot
486  *
487  *      Lookup and return the item at position @index in the radix
488  *      tree @root.
489  *
490  *      Until there is more than one item in the tree, no nodes are
491  *      allocated and @root->rnode is used as a direct slot instead of
492  *      pointing to a node, in which case *@nodep will be NULL.
493  */
494 void *__radix_tree_lookup(struct radix_tree_root *root, unsigned long index,
495                           struct radix_tree_node **nodep, void ***slotp)
496 {
497         struct radix_tree_node *node, *parent;
498         unsigned int height, shift;
499         void **slot;
500
501         node = rcu_dereference_raw(root->rnode);
502         if (node == NULL)
503                 return NULL;
504
505         if (!radix_tree_is_indirect_ptr(node)) {
506                 if (index > 0)
507                         return NULL;
508
509                 if (nodep)
510                         *nodep = NULL;
511                 if (slotp)
512                         *slotp = (void **)&root->rnode;
513                 return node;
514         }
515         node = indirect_to_ptr(node);
516
517         height = node->path & RADIX_TREE_HEIGHT_MASK;
518         if (index > radix_tree_maxindex(height))
519                 return NULL;
520
521         shift = (height-1) * RADIX_TREE_MAP_SHIFT;
522
523         do {
524                 parent = node;
525                 slot = node->slots + ((index >> shift) & RADIX_TREE_MAP_MASK);
526                 node = rcu_dereference_raw(*slot);
527                 if (node == NULL)
528                         return NULL;
529
530                 shift -= RADIX_TREE_MAP_SHIFT;
531                 height--;
532         } while (height > 0);
533
534         if (nodep)
535                 *nodep = parent;
536         if (slotp)
537                 *slotp = slot;
538         return node;
539 }
540
541 /**
542  *      radix_tree_lookup_slot    -    lookup a slot in a radix tree
543  *      @root:          radix tree root
544  *      @index:         index key
545  *
546  *      Returns:  the slot corresponding to the position @index in the
547  *      radix tree @root. This is useful for update-if-exists operations.
548  *
549  *      This function can be called under rcu_read_lock iff the slot is not
550  *      modified by radix_tree_replace_slot, otherwise it must be called
551  *      exclusive from other writers. Any dereference of the slot must be done
552  *      using radix_tree_deref_slot.
553  */
554 void **radix_tree_lookup_slot(struct radix_tree_root *root, unsigned long index)
555 {
556         void **slot;
557
558         if (!__radix_tree_lookup(root, index, NULL, &slot))
559                 return NULL;
560         return slot;
561 }
562 EXPORT_SYMBOL(radix_tree_lookup_slot);
563
564 /**
565  *      radix_tree_lookup    -    perform lookup operation on a radix tree
566  *      @root:          radix tree root
567  *      @index:         index key
568  *
569  *      Lookup the item at the position @index in the radix tree @root.
570  *
571  *      This function can be called under rcu_read_lock, however the caller
572  *      must manage lifetimes of leaf nodes (eg. RCU may also be used to free
573  *      them safely). No RCU barriers are required to access or modify the
574  *      returned item, however.
575  */
576 void *radix_tree_lookup(struct radix_tree_root *root, unsigned long index)
577 {
578         return __radix_tree_lookup(root, index, NULL, NULL);
579 }
580 EXPORT_SYMBOL(radix_tree_lookup);
581
582 /**
583  *      radix_tree_tag_set - set a tag on a radix tree node
584  *      @root:          radix tree root
585  *      @index:         index key
586  *      @tag:           tag index
587  *
588  *      Set the search tag (which must be < RADIX_TREE_MAX_TAGS)
589  *      corresponding to @index in the radix tree.  From
590  *      the root all the way down to the leaf node.
591  *
592  *      Returns the address of the tagged item.   Setting a tag on a not-present
593  *      item is a bug.
594  */
595 void *radix_tree_tag_set(struct radix_tree_root *root,
596                         unsigned long index, unsigned int tag)
597 {
598         unsigned int height, shift;
599         struct radix_tree_node *slot;
600
601         height = root->height;
602         BUG_ON(index > radix_tree_maxindex(height));
603
604         slot = indirect_to_ptr(root->rnode);
605         shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
606
607         while (height > 0) {
608                 int offset;
609
610                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
611                 if (!tag_get(slot, tag, offset))
612                         tag_set(slot, tag, offset);
613                 slot = slot->slots[offset];
614                 BUG_ON(slot == NULL);
615                 shift -= RADIX_TREE_MAP_SHIFT;
616                 height--;
617         }
618
619         /* set the root's tag bit */
620         if (slot && !root_tag_get(root, tag))
621                 root_tag_set(root, tag);
622
623         return slot;
624 }
625 EXPORT_SYMBOL(radix_tree_tag_set);
626
627 /**
628  *      radix_tree_tag_clear - clear a tag on a radix tree node
629  *      @root:          radix tree root
630  *      @index:         index key
631  *      @tag:           tag index
632  *
633  *      Clear the search tag (which must be < RADIX_TREE_MAX_TAGS)
634  *      corresponding to @index in the radix tree.  If
635  *      this causes the leaf node to have no tags set then clear the tag in the
636  *      next-to-leaf node, etc.
637  *
638  *      Returns the address of the tagged item on success, else NULL.  ie:
639  *      has the same return value and semantics as radix_tree_lookup().
640  */
641 void *radix_tree_tag_clear(struct radix_tree_root *root,
642                         unsigned long index, unsigned int tag)
643 {
644         struct radix_tree_node *node = NULL;
645         struct radix_tree_node *slot = NULL;
646         unsigned int height, shift;
647         int uninitialized_var(offset);
648
649         height = root->height;
650         if (index > radix_tree_maxindex(height))
651                 goto out;
652
653         shift = height * RADIX_TREE_MAP_SHIFT;
654         slot = indirect_to_ptr(root->rnode);
655
656         while (shift) {
657                 if (slot == NULL)
658                         goto out;
659
660                 shift -= RADIX_TREE_MAP_SHIFT;
661                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
662                 node = slot;
663                 slot = slot->slots[offset];
664         }
665
666         if (slot == NULL)
667                 goto out;
668
669         while (node) {
670                 if (!tag_get(node, tag, offset))
671                         goto out;
672                 tag_clear(node, tag, offset);
673                 if (any_tag_set(node, tag))
674                         goto out;
675
676                 index >>= RADIX_TREE_MAP_SHIFT;
677                 offset = index & RADIX_TREE_MAP_MASK;
678                 node = node->parent;
679         }
680
681         /* clear the root's tag bit */
682         if (root_tag_get(root, tag))
683                 root_tag_clear(root, tag);
684
685 out:
686         return slot;
687 }
688 EXPORT_SYMBOL(radix_tree_tag_clear);
689
690 /**
691  * radix_tree_tag_get - get a tag on a radix tree node
692  * @root:               radix tree root
693  * @index:              index key
694  * @tag:                tag index (< RADIX_TREE_MAX_TAGS)
695  *
696  * Return values:
697  *
698  *  0: tag not present or not set
699  *  1: tag set
700  *
701  * Note that the return value of this function may not be relied on, even if
702  * the RCU lock is held, unless tag modification and node deletion are excluded
703  * from concurrency.
704  */
705 int radix_tree_tag_get(struct radix_tree_root *root,
706                         unsigned long index, unsigned int tag)
707 {
708         unsigned int height, shift;
709         struct radix_tree_node *node;
710
711         /* check the root's tag bit */
712         if (!root_tag_get(root, tag))
713                 return 0;
714
715         node = rcu_dereference_raw(root->rnode);
716         if (node == NULL)
717                 return 0;
718
719         if (!radix_tree_is_indirect_ptr(node))
720                 return (index == 0);
721         node = indirect_to_ptr(node);
722
723         height = node->path & RADIX_TREE_HEIGHT_MASK;
724         if (index > radix_tree_maxindex(height))
725                 return 0;
726
727         shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
728
729         for ( ; ; ) {
730                 int offset;
731
732                 if (node == NULL)
733                         return 0;
734
735                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
736                 if (!tag_get(node, tag, offset))
737                         return 0;
738                 if (height == 1)
739                         return 1;
740                 node = rcu_dereference_raw(node->slots[offset]);
741                 shift -= RADIX_TREE_MAP_SHIFT;
742                 height--;
743         }
744 }
745 EXPORT_SYMBOL(radix_tree_tag_get);
746
747 /**
748  * radix_tree_next_chunk - find next chunk of slots for iteration
749  *
750  * @root:       radix tree root
751  * @iter:       iterator state
752  * @flags:      RADIX_TREE_ITER_* flags and tag index
753  * Returns:     pointer to chunk first slot, or NULL if iteration is over
754  */
755 void **radix_tree_next_chunk(struct radix_tree_root *root,
756                              struct radix_tree_iter *iter, unsigned flags)
757 {
758         unsigned shift, tag = flags & RADIX_TREE_ITER_TAG_MASK;
759         struct radix_tree_node *rnode, *node;
760         unsigned long index, offset, height;
761
762         if ((flags & RADIX_TREE_ITER_TAGGED) && !root_tag_get(root, tag))
763                 return NULL;
764
765         /*
766          * Catch next_index overflow after ~0UL. iter->index never overflows
767          * during iterating; it can be zero only at the beginning.
768          * And we cannot overflow iter->next_index in a single step,
769          * because RADIX_TREE_MAP_SHIFT < BITS_PER_LONG.
770          *
771          * This condition also used by radix_tree_next_slot() to stop
772          * contiguous iterating, and forbid swithing to the next chunk.
773          */
774         index = iter->next_index;
775         if (!index && iter->index)
776                 return NULL;
777
778         rnode = rcu_dereference_raw(root->rnode);
779         if (radix_tree_is_indirect_ptr(rnode)) {
780                 rnode = indirect_to_ptr(rnode);
781         } else if (rnode && !index) {
782                 /* Single-slot tree */
783                 iter->index = 0;
784                 iter->next_index = 1;
785                 iter->tags = 1;
786                 return (void **)&root->rnode;
787         } else
788                 return NULL;
789
790 restart:
791         height = rnode->path & RADIX_TREE_HEIGHT_MASK;
792         shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
793         offset = index >> shift;
794
795         /* Index outside of the tree */
796         if (offset >= RADIX_TREE_MAP_SIZE)
797                 return NULL;
798
799         node = rnode;
800         while (1) {
801                 if ((flags & RADIX_TREE_ITER_TAGGED) ?
802                                 !test_bit(offset, node->tags[tag]) :
803                                 !node->slots[offset]) {
804                         /* Hole detected */
805                         if (flags & RADIX_TREE_ITER_CONTIG)
806                                 return NULL;
807
808                         if (flags & RADIX_TREE_ITER_TAGGED)
809                                 offset = radix_tree_find_next_bit(
810                                                 node->tags[tag],
811                                                 RADIX_TREE_MAP_SIZE,
812                                                 offset + 1);
813                         else
814                                 while (++offset < RADIX_TREE_MAP_SIZE) {
815                                         if (node->slots[offset])
816                                                 break;
817                                 }
818                         index &= ~((RADIX_TREE_MAP_SIZE << shift) - 1);
819                         index += offset << shift;
820                         /* Overflow after ~0UL */
821                         if (!index)
822                                 return NULL;
823                         if (offset == RADIX_TREE_MAP_SIZE)
824                                 goto restart;
825                 }
826
827                 /* This is leaf-node */
828                 if (!shift)
829                         break;
830
831                 node = rcu_dereference_raw(node->slots[offset]);
832                 if (node == NULL)
833                         goto restart;
834                 shift -= RADIX_TREE_MAP_SHIFT;
835                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
836         }
837
838         /* Update the iterator state */
839         iter->index = index;
840         iter->next_index = (index | RADIX_TREE_MAP_MASK) + 1;
841
842         /* Construct iter->tags bit-mask from node->tags[tag] array */
843         if (flags & RADIX_TREE_ITER_TAGGED) {
844                 unsigned tag_long, tag_bit;
845
846                 tag_long = offset / BITS_PER_LONG;
847                 tag_bit  = offset % BITS_PER_LONG;
848                 iter->tags = node->tags[tag][tag_long] >> tag_bit;
849                 /* This never happens if RADIX_TREE_TAG_LONGS == 1 */
850                 if (tag_long < RADIX_TREE_TAG_LONGS - 1) {
851                         /* Pick tags from next element */
852                         if (tag_bit)
853                                 iter->tags |= node->tags[tag][tag_long + 1] <<
854                                                 (BITS_PER_LONG - tag_bit);
855                         /* Clip chunk size, here only BITS_PER_LONG tags */
856                         iter->next_index = index + BITS_PER_LONG;
857                 }
858         }
859
860         return node->slots + offset;
861 }
862 EXPORT_SYMBOL(radix_tree_next_chunk);
863
864 /**
865  * radix_tree_range_tag_if_tagged - for each item in given range set given
866  *                                 tag if item has another tag set
867  * @root:               radix tree root
868  * @first_indexp:       pointer to a starting index of a range to scan
869  * @last_index:         last index of a range to scan
870  * @nr_to_tag:          maximum number items to tag
871  * @iftag:              tag index to test
872  * @settag:             tag index to set if tested tag is set
873  *
874  * This function scans range of radix tree from first_index to last_index
875  * (inclusive).  For each item in the range if iftag is set, the function sets
876  * also settag. The function stops either after tagging nr_to_tag items or
877  * after reaching last_index.
878  *
879  * The tags must be set from the leaf level only and propagated back up the
880  * path to the root. We must do this so that we resolve the full path before
881  * setting any tags on intermediate nodes. If we set tags as we descend, then
882  * we can get to the leaf node and find that the index that has the iftag
883  * set is outside the range we are scanning. This reults in dangling tags and
884  * can lead to problems with later tag operations (e.g. livelocks on lookups).
885  *
886  * The function returns number of leaves where the tag was set and sets
887  * *first_indexp to the first unscanned index.
888  * WARNING! *first_indexp can wrap if last_index is ULONG_MAX. Caller must
889  * be prepared to handle that.
890  */
891 unsigned long radix_tree_range_tag_if_tagged(struct radix_tree_root *root,
892                 unsigned long *first_indexp, unsigned long last_index,
893                 unsigned long nr_to_tag,
894                 unsigned int iftag, unsigned int settag)
895 {
896         unsigned int height = root->height;
897         struct radix_tree_node *node = NULL;
898         struct radix_tree_node *slot;
899         unsigned int shift;
900         unsigned long tagged = 0;
901         unsigned long index = *first_indexp;
902
903         last_index = min(last_index, radix_tree_maxindex(height));
904         if (index > last_index)
905                 return 0;
906         if (!nr_to_tag)
907                 return 0;
908         if (!root_tag_get(root, iftag)) {
909                 *first_indexp = last_index + 1;
910                 return 0;
911         }
912         if (height == 0) {
913                 *first_indexp = last_index + 1;
914                 root_tag_set(root, settag);
915                 return 1;
916         }
917
918         shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
919         slot = indirect_to_ptr(root->rnode);
920
921         for (;;) {
922                 unsigned long upindex;
923                 int offset;
924
925                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
926                 if (!slot->slots[offset])
927                         goto next;
928                 if (!tag_get(slot, iftag, offset))
929                         goto next;
930                 if (shift) {
931                         /* Go down one level */
932                         shift -= RADIX_TREE_MAP_SHIFT;
933                         node = slot;
934                         slot = slot->slots[offset];
935                         continue;
936                 }
937
938                 /* tag the leaf */
939                 tagged++;
940                 tag_set(slot, settag, offset);
941
942                 /* walk back up the path tagging interior nodes */
943                 upindex = index;
944                 while (node) {
945                         upindex >>= RADIX_TREE_MAP_SHIFT;
946                         offset = upindex & RADIX_TREE_MAP_MASK;
947
948                         /* stop if we find a node with the tag already set */
949                         if (tag_get(node, settag, offset))
950                                 break;
951                         tag_set(node, settag, offset);
952                         node = node->parent;
953                 }
954
955                 /*
956                  * Small optimization: now clear that node pointer.
957                  * Since all of this slot's ancestors now have the tag set
958                  * from setting it above, we have no further need to walk
959                  * back up the tree setting tags, until we update slot to
960                  * point to another radix_tree_node.
961                  */
962                 node = NULL;
963
964 next:
965                 /* Go to next item at level determined by 'shift' */
966                 index = ((index >> shift) + 1) << shift;
967                 /* Overflow can happen when last_index is ~0UL... */
968                 if (index > last_index || !index)
969                         break;
970                 if (tagged >= nr_to_tag)
971                         break;
972                 while (((index >> shift) & RADIX_TREE_MAP_MASK) == 0) {
973                         /*
974                          * We've fully scanned this node. Go up. Because
975                          * last_index is guaranteed to be in the tree, what
976                          * we do below cannot wander astray.
977                          */
978                         slot = slot->parent;
979                         shift += RADIX_TREE_MAP_SHIFT;
980                 }
981         }
982         /*
983          * We need not to tag the root tag if there is no tag which is set with
984          * settag within the range from *first_indexp to last_index.
985          */
986         if (tagged > 0)
987                 root_tag_set(root, settag);
988         *first_indexp = index;
989
990         return tagged;
991 }
992 EXPORT_SYMBOL(radix_tree_range_tag_if_tagged);
993
994 /**
995  *      radix_tree_gang_lookup - perform multiple lookup on a radix tree
996  *      @root:          radix tree root
997  *      @results:       where the results of the lookup are placed
998  *      @first_index:   start the lookup from this key
999  *      @max_items:     place up to this many items at *results
1000  *
1001  *      Performs an index-ascending scan of the tree for present items.  Places
1002  *      them at *@results and returns the number of items which were placed at
1003  *      *@results.
1004  *
1005  *      The implementation is naive.
1006  *
1007  *      Like radix_tree_lookup, radix_tree_gang_lookup may be called under
1008  *      rcu_read_lock. In this case, rather than the returned results being
1009  *      an atomic snapshot of the tree at a single point in time, the semantics
1010  *      of an RCU protected gang lookup are as though multiple radix_tree_lookups
1011  *      have been issued in individual locks, and results stored in 'results'.
1012  */
1013 unsigned int
1014 radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
1015                         unsigned long first_index, unsigned int max_items)
1016 {
1017         struct radix_tree_iter iter;
1018         void **slot;
1019         unsigned int ret = 0;
1020
1021         if (unlikely(!max_items))
1022                 return 0;
1023
1024         radix_tree_for_each_slot(slot, root, &iter, first_index) {
1025                 results[ret] = rcu_dereference_raw(*slot);
1026                 if (!results[ret])
1027                         continue;
1028                 if (radix_tree_is_indirect_ptr(results[ret])) {
1029                         slot = radix_tree_iter_retry(&iter);
1030                         continue;
1031                 }
1032                 if (++ret == max_items)
1033                         break;
1034         }
1035
1036         return ret;
1037 }
1038 EXPORT_SYMBOL(radix_tree_gang_lookup);
1039
1040 /**
1041  *      radix_tree_gang_lookup_slot - perform multiple slot lookup on radix tree
1042  *      @root:          radix tree root
1043  *      @results:       where the results of the lookup are placed
1044  *      @indices:       where their indices should be placed (but usually NULL)
1045  *      @first_index:   start the lookup from this key
1046  *      @max_items:     place up to this many items at *results
1047  *
1048  *      Performs an index-ascending scan of the tree for present items.  Places
1049  *      their slots at *@results and returns the number of items which were
1050  *      placed at *@results.
1051  *
1052  *      The implementation is naive.
1053  *
1054  *      Like radix_tree_gang_lookup as far as RCU and locking goes. Slots must
1055  *      be dereferenced with radix_tree_deref_slot, and if using only RCU
1056  *      protection, radix_tree_deref_slot may fail requiring a retry.
1057  */
1058 unsigned int
1059 radix_tree_gang_lookup_slot(struct radix_tree_root *root,
1060                         void ***results, unsigned long *indices,
1061                         unsigned long first_index, unsigned int max_items)
1062 {
1063         struct radix_tree_iter iter;
1064         void **slot;
1065         unsigned int ret = 0;
1066
1067         if (unlikely(!max_items))
1068                 return 0;
1069
1070         radix_tree_for_each_slot(slot, root, &iter, first_index) {
1071                 results[ret] = slot;
1072                 if (indices)
1073                         indices[ret] = iter.index;
1074                 if (++ret == max_items)
1075                         break;
1076         }
1077
1078         return ret;
1079 }
1080 EXPORT_SYMBOL(radix_tree_gang_lookup_slot);
1081
1082 /**
1083  *      radix_tree_gang_lookup_tag - perform multiple lookup on a radix tree
1084  *                                   based on a tag
1085  *      @root:          radix tree root
1086  *      @results:       where the results of the lookup are placed
1087  *      @first_index:   start the lookup from this key
1088  *      @max_items:     place up to this many items at *results
1089  *      @tag:           the tag index (< RADIX_TREE_MAX_TAGS)
1090  *
1091  *      Performs an index-ascending scan of the tree for present items which
1092  *      have the tag indexed by @tag set.  Places the items at *@results and
1093  *      returns the number of items which were placed at *@results.
1094  */
1095 unsigned int
1096 radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results,
1097                 unsigned long first_index, unsigned int max_items,
1098                 unsigned int tag)
1099 {
1100         struct radix_tree_iter iter;
1101         void **slot;
1102         unsigned int ret = 0;
1103
1104         if (unlikely(!max_items))
1105                 return 0;
1106
1107         radix_tree_for_each_tagged(slot, root, &iter, first_index, tag) {
1108                 results[ret] = rcu_dereference_raw(*slot);
1109                 if (!results[ret])
1110                         continue;
1111                 if (radix_tree_is_indirect_ptr(results[ret])) {
1112                         slot = radix_tree_iter_retry(&iter);
1113                         continue;
1114                 }
1115                 if (++ret == max_items)
1116                         break;
1117         }
1118
1119         return ret;
1120 }
1121 EXPORT_SYMBOL(radix_tree_gang_lookup_tag);
1122
1123 /**
1124  *      radix_tree_gang_lookup_tag_slot - perform multiple slot lookup on a
1125  *                                        radix tree based on a tag
1126  *      @root:          radix tree root
1127  *      @results:       where the results of the lookup are placed
1128  *      @first_index:   start the lookup from this key
1129  *      @max_items:     place up to this many items at *results
1130  *      @tag:           the tag index (< RADIX_TREE_MAX_TAGS)
1131  *
1132  *      Performs an index-ascending scan of the tree for present items which
1133  *      have the tag indexed by @tag set.  Places the slots at *@results and
1134  *      returns the number of slots which were placed at *@results.
1135  */
1136 unsigned int
1137 radix_tree_gang_lookup_tag_slot(struct radix_tree_root *root, void ***results,
1138                 unsigned long first_index, unsigned int max_items,
1139                 unsigned int tag)
1140 {
1141         struct radix_tree_iter iter;
1142         void **slot;
1143         unsigned int ret = 0;
1144
1145         if (unlikely(!max_items))
1146                 return 0;
1147
1148         radix_tree_for_each_tagged(slot, root, &iter, first_index, tag) {
1149                 results[ret] = slot;
1150                 if (++ret == max_items)
1151                         break;
1152         }
1153
1154         return ret;
1155 }
1156 EXPORT_SYMBOL(radix_tree_gang_lookup_tag_slot);
1157
1158 #if defined(CONFIG_SHMEM) && defined(CONFIG_SWAP)
1159 #include <linux/sched.h> /* for cond_resched() */
1160
1161 /*
1162  * This linear search is at present only useful to shmem_unuse_inode().
1163  */
1164 static unsigned long __locate(struct radix_tree_node *slot, void *item,
1165                               unsigned long index, unsigned long *found_index)
1166 {
1167         unsigned int shift, height;
1168         unsigned long i;
1169
1170         height = slot->path & RADIX_TREE_HEIGHT_MASK;
1171         shift = (height-1) * RADIX_TREE_MAP_SHIFT;
1172
1173         for ( ; height > 1; height--) {
1174                 i = (index >> shift) & RADIX_TREE_MAP_MASK;
1175                 for (;;) {
1176                         if (slot->slots[i] != NULL)
1177                                 break;
1178                         index &= ~((1UL << shift) - 1);
1179                         index += 1UL << shift;
1180                         if (index == 0)
1181                                 goto out;       /* 32-bit wraparound */
1182                         i++;
1183                         if (i == RADIX_TREE_MAP_SIZE)
1184                                 goto out;
1185                 }
1186
1187                 shift -= RADIX_TREE_MAP_SHIFT;
1188                 slot = rcu_dereference_raw(slot->slots[i]);
1189                 if (slot == NULL)
1190                         goto out;
1191         }
1192
1193         /* Bottom level: check items */
1194         for (i = 0; i < RADIX_TREE_MAP_SIZE; i++) {
1195                 if (slot->slots[i] == item) {
1196                         *found_index = index + i;
1197                         index = 0;
1198                         goto out;
1199                 }
1200         }
1201         index += RADIX_TREE_MAP_SIZE;
1202 out:
1203         return index;
1204 }
1205
1206 /**
1207  *      radix_tree_locate_item - search through radix tree for item
1208  *      @root:          radix tree root
1209  *      @item:          item to be found
1210  *
1211  *      Returns index where item was found, or -1 if not found.
1212  *      Caller must hold no lock (since this time-consuming function needs
1213  *      to be preemptible), and must check afterwards if item is still there.
1214  */
1215 unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item)
1216 {
1217         struct radix_tree_node *node;
1218         unsigned long max_index;
1219         unsigned long cur_index = 0;
1220         unsigned long found_index = -1;
1221
1222         do {
1223                 rcu_read_lock();
1224                 node = rcu_dereference_raw(root->rnode);
1225                 if (!radix_tree_is_indirect_ptr(node)) {
1226                         rcu_read_unlock();
1227                         if (node == item)
1228                                 found_index = 0;
1229                         break;
1230                 }
1231
1232                 node = indirect_to_ptr(node);
1233                 max_index = radix_tree_maxindex(node->path &
1234                                                 RADIX_TREE_HEIGHT_MASK);
1235                 if (cur_index > max_index) {
1236                         rcu_read_unlock();
1237                         break;
1238                 }
1239
1240                 cur_index = __locate(node, item, cur_index, &found_index);
1241                 rcu_read_unlock();
1242                 cond_resched();
1243         } while (cur_index != 0 && cur_index <= max_index);
1244
1245         return found_index;
1246 }
1247 #else
1248 unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item)
1249 {
1250         return -1;
1251 }
1252 #endif /* CONFIG_SHMEM && CONFIG_SWAP */
1253
1254 /**
1255  *      radix_tree_shrink    -    shrink height of a radix tree to minimal
1256  *      @root           radix tree root
1257  */
1258 static inline void radix_tree_shrink(struct radix_tree_root *root)
1259 {
1260         /* try to shrink tree height */
1261         while (root->height > 0) {
1262                 struct radix_tree_node *to_free = root->rnode;
1263                 struct radix_tree_node *slot;
1264
1265                 BUG_ON(!radix_tree_is_indirect_ptr(to_free));
1266                 to_free = indirect_to_ptr(to_free);
1267
1268                 /*
1269                  * The candidate node has more than one child, or its child
1270                  * is not at the leftmost slot, we cannot shrink.
1271                  */
1272                 if (to_free->count != 1)
1273                         break;
1274                 if (!to_free->slots[0])
1275                         break;
1276
1277                 /*
1278                  * We don't need rcu_assign_pointer(), since we are simply
1279                  * moving the node from one part of the tree to another: if it
1280                  * was safe to dereference the old pointer to it
1281                  * (to_free->slots[0]), it will be safe to dereference the new
1282                  * one (root->rnode) as far as dependent read barriers go.
1283                  */
1284                 slot = to_free->slots[0];
1285                 if (root->height > 1) {
1286                         slot->parent = NULL;
1287                         slot = ptr_to_indirect(slot);
1288                 }
1289                 root->rnode = slot;
1290                 root->height--;
1291
1292                 /*
1293                  * We have a dilemma here. The node's slot[0] must not be
1294                  * NULLed in case there are concurrent lookups expecting to
1295                  * find the item. However if this was a bottom-level node,
1296                  * then it may be subject to the slot pointer being visible
1297                  * to callers dereferencing it. If item corresponding to
1298                  * slot[0] is subsequently deleted, these callers would expect
1299                  * their slot to become empty sooner or later.
1300                  *
1301                  * For example, lockless pagecache will look up a slot, deref
1302                  * the page pointer, and if the page is 0 refcount it means it
1303                  * was concurrently deleted from pagecache so try the deref
1304                  * again. Fortunately there is already a requirement for logic
1305                  * to retry the entire slot lookup -- the indirect pointer
1306                  * problem (replacing direct root node with an indirect pointer
1307                  * also results in a stale slot). So tag the slot as indirect
1308                  * to force callers to retry.
1309                  */
1310                 if (root->height == 0)
1311                         *((unsigned long *)&to_free->slots[0]) |=
1312                                                 RADIX_TREE_INDIRECT_PTR;
1313
1314                 radix_tree_node_free(to_free);
1315         }
1316 }
1317
1318 /**
1319  *      __radix_tree_delete_node    -    try to free node after clearing a slot
1320  *      @root:          radix tree root
1321  *      @node:          node containing @index
1322  *
1323  *      After clearing the slot at @index in @node from radix tree
1324  *      rooted at @root, call this function to attempt freeing the
1325  *      node and shrinking the tree.
1326  *
1327  *      Returns %true if @node was freed, %false otherwise.
1328  */
1329 bool __radix_tree_delete_node(struct radix_tree_root *root,
1330                               struct radix_tree_node *node)
1331 {
1332         bool deleted = false;
1333
1334         do {
1335                 struct radix_tree_node *parent;
1336
1337                 if (node->count) {
1338                         if (node == indirect_to_ptr(root->rnode)) {
1339                                 radix_tree_shrink(root);
1340                                 if (root->height == 0)
1341                                         deleted = true;
1342                         }
1343                         return deleted;
1344                 }
1345
1346                 parent = node->parent;
1347                 if (parent) {
1348                         unsigned int offset;
1349
1350                         offset = node->path >> RADIX_TREE_HEIGHT_SHIFT;
1351                         parent->slots[offset] = NULL;
1352                         parent->count--;
1353                 } else {
1354                         root_tag_clear_all(root);
1355                         root->height = 0;
1356                         root->rnode = NULL;
1357                 }
1358
1359                 radix_tree_node_free(node);
1360                 deleted = true;
1361
1362                 node = parent;
1363         } while (node);
1364
1365         return deleted;
1366 }
1367
1368 /**
1369  *      radix_tree_delete_item    -    delete an item from a radix tree
1370  *      @root:          radix tree root
1371  *      @index:         index key
1372  *      @item:          expected item
1373  *
1374  *      Remove @item at @index from the radix tree rooted at @root.
1375  *
1376  *      Returns the address of the deleted item, or NULL if it was not present
1377  *      or the entry at the given @index was not @item.
1378  */
1379 void *radix_tree_delete_item(struct radix_tree_root *root,
1380                              unsigned long index, void *item)
1381 {
1382         struct radix_tree_node *node;
1383         unsigned int offset;
1384         void **slot;
1385         void *entry;
1386         int tag;
1387
1388         entry = __radix_tree_lookup(root, index, &node, &slot);
1389         if (!entry)
1390                 return NULL;
1391
1392         if (item && entry != item)
1393                 return NULL;
1394
1395         if (!node) {
1396                 root_tag_clear_all(root);
1397                 root->rnode = NULL;
1398                 return entry;
1399         }
1400
1401         offset = index & RADIX_TREE_MAP_MASK;
1402
1403         /*
1404          * Clear all tags associated with the item to be deleted.
1405          * This way of doing it would be inefficient, but seldom is any set.
1406          */
1407         for (tag = 0; tag < RADIX_TREE_MAX_TAGS; tag++) {
1408                 if (tag_get(node, tag, offset))
1409                         radix_tree_tag_clear(root, index, tag);
1410         }
1411
1412         node->slots[offset] = NULL;
1413         node->count--;
1414
1415         __radix_tree_delete_node(root, node);
1416
1417         return entry;
1418 }
1419 EXPORT_SYMBOL(radix_tree_delete_item);
1420
1421 /**
1422  *      radix_tree_delete    -    delete an item from a radix tree
1423  *      @root:          radix tree root
1424  *      @index:         index key
1425  *
1426  *      Remove the item at @index from the radix tree rooted at @root.
1427  *
1428  *      Returns the address of the deleted item, or NULL if it was not present.
1429  */
1430 void *radix_tree_delete(struct radix_tree_root *root, unsigned long index)
1431 {
1432         return radix_tree_delete_item(root, index, NULL);
1433 }
1434 EXPORT_SYMBOL(radix_tree_delete);
1435
1436 /**
1437  *      radix_tree_tagged - test whether any items in the tree are tagged
1438  *      @root:          radix tree root
1439  *      @tag:           tag to test
1440  */
1441 int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag)
1442 {
1443         return root_tag_get(root, tag);
1444 }
1445 EXPORT_SYMBOL(radix_tree_tagged);
1446
1447 static void
1448 radix_tree_node_ctor(void *arg)
1449 {
1450         struct radix_tree_node *node = arg;
1451
1452         memset(node, 0, sizeof(*node));
1453         INIT_LIST_HEAD(&node->private_list);
1454 }
1455
1456 static __init unsigned long __maxindex(unsigned int height)
1457 {
1458         unsigned int width = height * RADIX_TREE_MAP_SHIFT;
1459         int shift = RADIX_TREE_INDEX_BITS - width;
1460
1461         if (shift < 0)
1462                 return ~0UL;
1463         if (shift >= BITS_PER_LONG)
1464                 return 0UL;
1465         return ~0UL >> shift;
1466 }
1467
1468 static __init void radix_tree_init_maxindex(void)
1469 {
1470         unsigned int i;
1471
1472         for (i = 0; i < ARRAY_SIZE(height_to_maxindex); i++)
1473                 height_to_maxindex[i] = __maxindex(i);
1474 }
1475
1476 static int radix_tree_callback(struct notifier_block *nfb,
1477                             unsigned long action,
1478                             void *hcpu)
1479 {
1480        int cpu = (long)hcpu;
1481        struct radix_tree_preload *rtp;
1482        struct radix_tree_node *node;
1483
1484        /* Free per-cpu pool of perloaded nodes */
1485        if (action == CPU_DEAD || action == CPU_DEAD_FROZEN) {
1486                rtp = &per_cpu(radix_tree_preloads, cpu);
1487                while (rtp->nr) {
1488                         node = rtp->nodes;
1489                         rtp->nodes = node->private_data;
1490                         kmem_cache_free(radix_tree_node_cachep, node);
1491                         rtp->nr--;
1492                }
1493        }
1494        return NOTIFY_OK;
1495 }
1496
1497 void __init radix_tree_init(void)
1498 {
1499         radix_tree_node_cachep = kmem_cache_create("radix_tree_node",
1500                         sizeof(struct radix_tree_node), 0,
1501                         SLAB_PANIC | SLAB_RECLAIM_ACCOUNT,
1502                         radix_tree_node_ctor);
1503         radix_tree_init_maxindex();
1504         hotcpu_notifier(radix_tree_callback, 0);
1505 }