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