b3364b9ecc839208c2226ddd3e32b950c40ea035
[cascardo/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 /*
409  *      Extend a radix tree so it can store key @index.
410  */
411 static int radix_tree_extend(struct radix_tree_root *root,
412                                 unsigned long index, unsigned order)
413 {
414         struct radix_tree_node *node;
415         struct radix_tree_node *slot;
416         unsigned int height;
417         int tag;
418
419         /* Figure out what the height should be.  */
420         height = root->height + 1;
421         while (index > radix_tree_maxindex(height))
422                 height++;
423
424         if ((root->rnode == NULL) && (order == 0)) {
425                 root->height = height;
426                 goto out;
427         }
428
429         do {
430                 unsigned int newheight;
431                 if (!(node = radix_tree_node_alloc(root)))
432                         return -ENOMEM;
433
434                 /* Propagate the aggregated tag info into the new root */
435                 for (tag = 0; tag < RADIX_TREE_MAX_TAGS; tag++) {
436                         if (root_tag_get(root, tag))
437                                 tag_set(node, tag, 0);
438                 }
439
440                 /* Increase the height.  */
441                 newheight = root->height+1;
442                 BUG_ON(newheight & ~RADIX_TREE_HEIGHT_MASK);
443                 node->path = newheight;
444                 node->count = 1;
445                 node->parent = NULL;
446                 slot = root->rnode;
447                 if (radix_tree_is_indirect_ptr(slot) && newheight > 1) {
448                         slot = indirect_to_ptr(slot);
449                         slot->parent = node;
450                         slot = ptr_to_indirect(slot);
451                 }
452                 node->slots[0] = slot;
453                 node = ptr_to_indirect(node);
454                 rcu_assign_pointer(root->rnode, node);
455                 root->height = newheight;
456         } while (height > root->height);
457 out:
458         return 0;
459 }
460
461 /**
462  *      __radix_tree_create     -       create a slot in a radix tree
463  *      @root:          radix tree root
464  *      @index:         index key
465  *      @order:         index occupies 2^order aligned slots
466  *      @nodep:         returns node
467  *      @slotp:         returns slot
468  *
469  *      Create, if necessary, and return the node and slot for an item
470  *      at position @index in the radix tree @root.
471  *
472  *      Until there is more than one item in the tree, no nodes are
473  *      allocated and @root->rnode is used as a direct slot instead of
474  *      pointing to a node, in which case *@nodep will be NULL.
475  *
476  *      Returns -ENOMEM, or 0 for success.
477  */
478 int __radix_tree_create(struct radix_tree_root *root, unsigned long index,
479                         unsigned order, struct radix_tree_node **nodep,
480                         void ***slotp)
481 {
482         struct radix_tree_node *node = NULL, *slot;
483         unsigned int height, shift, offset;
484         int error;
485
486         BUG_ON((0 < order) && (order < RADIX_TREE_MAP_SHIFT));
487
488         /* Make sure the tree is high enough.  */
489         if (index > radix_tree_maxindex(root->height)) {
490                 error = radix_tree_extend(root, index, order);
491                 if (error)
492                         return error;
493         }
494
495         slot = root->rnode;
496
497         height = root->height;
498         shift = height * RADIX_TREE_MAP_SHIFT;
499
500         offset = 0;                     /* uninitialised var warning */
501         while (shift > order) {
502                 if (slot == NULL) {
503                         /* Have to add a child node.  */
504                         if (!(slot = radix_tree_node_alloc(root)))
505                                 return -ENOMEM;
506                         slot->path = height;
507                         slot->parent = node;
508                         if (node) {
509                                 rcu_assign_pointer(node->slots[offset],
510                                                         ptr_to_indirect(slot));
511                                 node->count++;
512                                 slot->path |= offset << RADIX_TREE_HEIGHT_SHIFT;
513                         } else
514                                 rcu_assign_pointer(root->rnode,
515                                                         ptr_to_indirect(slot));
516                 } else if (!radix_tree_is_indirect_ptr(slot))
517                         break;
518
519                 /* Go a level down */
520                 height--;
521                 shift -= RADIX_TREE_MAP_SHIFT;
522                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
523                 node = indirect_to_ptr(slot);
524                 slot = node->slots[offset];
525         }
526
527 #ifdef CONFIG_RADIX_TREE_MULTIORDER
528         /* Insert pointers to the canonical entry */
529         if (order > shift) {
530                 int i, n = 1 << (order - shift);
531                 offset = offset & ~(n - 1);
532                 slot = ptr_to_indirect(&node->slots[offset]);
533                 for (i = 0; i < n; i++) {
534                         if (node->slots[offset + i])
535                                 return -EEXIST;
536                 }
537
538                 for (i = 1; i < n; i++) {
539                         rcu_assign_pointer(node->slots[offset + i], slot);
540                         node->count++;
541                 }
542         }
543 #endif
544
545         if (nodep)
546                 *nodep = node;
547         if (slotp)
548                 *slotp = node ? node->slots + offset : (void **)&root->rnode;
549         return 0;
550 }
551
552 /**
553  *      __radix_tree_insert    -    insert into a radix tree
554  *      @root:          radix tree root
555  *      @index:         index key
556  *      @order:         key covers the 2^order indices around index
557  *      @item:          item to insert
558  *
559  *      Insert an item into the radix tree at position @index.
560  */
561 int __radix_tree_insert(struct radix_tree_root *root, unsigned long index,
562                         unsigned order, void *item)
563 {
564         struct radix_tree_node *node;
565         void **slot;
566         int error;
567
568         BUG_ON(radix_tree_is_indirect_ptr(item));
569
570         error = __radix_tree_create(root, index, order, &node, &slot);
571         if (error)
572                 return error;
573         if (*slot != NULL)
574                 return -EEXIST;
575         rcu_assign_pointer(*slot, item);
576
577         if (node) {
578                 node->count++;
579                 BUG_ON(tag_get(node, 0, index & RADIX_TREE_MAP_MASK));
580                 BUG_ON(tag_get(node, 1, index & RADIX_TREE_MAP_MASK));
581         } else {
582                 BUG_ON(root_tag_get(root, 0));
583                 BUG_ON(root_tag_get(root, 1));
584         }
585
586         return 0;
587 }
588 EXPORT_SYMBOL(__radix_tree_insert);
589
590 /**
591  *      __radix_tree_lookup     -       lookup an item in a radix tree
592  *      @root:          radix tree root
593  *      @index:         index key
594  *      @nodep:         returns node
595  *      @slotp:         returns slot
596  *
597  *      Lookup and return the item at position @index in the radix
598  *      tree @root.
599  *
600  *      Until there is more than one item in the tree, no nodes are
601  *      allocated and @root->rnode is used as a direct slot instead of
602  *      pointing to a node, in which case *@nodep will be NULL.
603  */
604 void *__radix_tree_lookup(struct radix_tree_root *root, unsigned long index,
605                           struct radix_tree_node **nodep, void ***slotp)
606 {
607         struct radix_tree_node *node, *parent;
608         unsigned int height, shift;
609         void **slot;
610
611         node = rcu_dereference_raw(root->rnode);
612         if (node == NULL)
613                 return NULL;
614
615         if (!radix_tree_is_indirect_ptr(node)) {
616                 if (index > 0)
617                         return NULL;
618
619                 if (nodep)
620                         *nodep = NULL;
621                 if (slotp)
622                         *slotp = (void **)&root->rnode;
623                 return node;
624         }
625         node = indirect_to_ptr(node);
626
627         height = node->path & RADIX_TREE_HEIGHT_MASK;
628         if (index > radix_tree_maxindex(height))
629                 return NULL;
630
631         shift = (height-1) * RADIX_TREE_MAP_SHIFT;
632
633         do {
634                 parent = node;
635                 slot = node->slots + ((index >> shift) & RADIX_TREE_MAP_MASK);
636                 node = rcu_dereference_raw(*slot);
637                 if (node == NULL)
638                         return NULL;
639                 if (!radix_tree_is_indirect_ptr(node))
640                         break;
641                 node = indirect_to_ptr(node);
642
643                 shift -= RADIX_TREE_MAP_SHIFT;
644                 height--;
645         } while (height > 0);
646
647         if (nodep)
648                 *nodep = parent;
649         if (slotp)
650                 *slotp = slot;
651         return node;
652 }
653
654 /**
655  *      radix_tree_lookup_slot    -    lookup a slot in a radix tree
656  *      @root:          radix tree root
657  *      @index:         index key
658  *
659  *      Returns:  the slot corresponding to the position @index in the
660  *      radix tree @root. This is useful for update-if-exists operations.
661  *
662  *      This function can be called under rcu_read_lock iff the slot is not
663  *      modified by radix_tree_replace_slot, otherwise it must be called
664  *      exclusive from other writers. Any dereference of the slot must be done
665  *      using radix_tree_deref_slot.
666  */
667 void **radix_tree_lookup_slot(struct radix_tree_root *root, unsigned long index)
668 {
669         void **slot;
670
671         if (!__radix_tree_lookup(root, index, NULL, &slot))
672                 return NULL;
673         return slot;
674 }
675 EXPORT_SYMBOL(radix_tree_lookup_slot);
676
677 /**
678  *      radix_tree_lookup    -    perform lookup operation on a radix tree
679  *      @root:          radix tree root
680  *      @index:         index key
681  *
682  *      Lookup the item at the position @index in the radix tree @root.
683  *
684  *      This function can be called under rcu_read_lock, however the caller
685  *      must manage lifetimes of leaf nodes (eg. RCU may also be used to free
686  *      them safely). No RCU barriers are required to access or modify the
687  *      returned item, however.
688  */
689 void *radix_tree_lookup(struct radix_tree_root *root, unsigned long index)
690 {
691         return __radix_tree_lookup(root, index, NULL, NULL);
692 }
693 EXPORT_SYMBOL(radix_tree_lookup);
694
695 /**
696  *      radix_tree_tag_set - set a tag on a radix tree node
697  *      @root:          radix tree root
698  *      @index:         index key
699  *      @tag:           tag index
700  *
701  *      Set the search tag (which must be < RADIX_TREE_MAX_TAGS)
702  *      corresponding to @index in the radix tree.  From
703  *      the root all the way down to the leaf node.
704  *
705  *      Returns the address of the tagged item.   Setting a tag on a not-present
706  *      item is a bug.
707  */
708 void *radix_tree_tag_set(struct radix_tree_root *root,
709                         unsigned long index, unsigned int tag)
710 {
711         unsigned int height, shift;
712         struct radix_tree_node *slot;
713
714         height = root->height;
715         BUG_ON(index > radix_tree_maxindex(height));
716
717         slot = indirect_to_ptr(root->rnode);
718         shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
719
720         while (height > 0) {
721                 int offset;
722
723                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
724                 if (!tag_get(slot, tag, offset))
725                         tag_set(slot, tag, offset);
726                 slot = slot->slots[offset];
727                 BUG_ON(slot == NULL);
728                 if (!radix_tree_is_indirect_ptr(slot))
729                         break;
730                 slot = indirect_to_ptr(slot);
731                 shift -= RADIX_TREE_MAP_SHIFT;
732                 height--;
733         }
734
735         /* set the root's tag bit */
736         if (slot && !root_tag_get(root, tag))
737                 root_tag_set(root, tag);
738
739         return slot;
740 }
741 EXPORT_SYMBOL(radix_tree_tag_set);
742
743 /**
744  *      radix_tree_tag_clear - clear a tag on a radix tree node
745  *      @root:          radix tree root
746  *      @index:         index key
747  *      @tag:           tag index
748  *
749  *      Clear the search tag (which must be < RADIX_TREE_MAX_TAGS)
750  *      corresponding to @index in the radix tree.  If
751  *      this causes the leaf node to have no tags set then clear the tag in the
752  *      next-to-leaf node, etc.
753  *
754  *      Returns the address of the tagged item on success, else NULL.  ie:
755  *      has the same return value and semantics as radix_tree_lookup().
756  */
757 void *radix_tree_tag_clear(struct radix_tree_root *root,
758                         unsigned long index, unsigned int tag)
759 {
760         struct radix_tree_node *node = NULL;
761         struct radix_tree_node *slot = NULL;
762         unsigned int height, shift;
763         int uninitialized_var(offset);
764
765         height = root->height;
766         if (index > radix_tree_maxindex(height))
767                 goto out;
768
769         shift = height * RADIX_TREE_MAP_SHIFT;
770         slot = root->rnode;
771
772         while (shift) {
773                 if (slot == NULL)
774                         goto out;
775                 if (!radix_tree_is_indirect_ptr(slot))
776                         break;
777                 slot = indirect_to_ptr(slot);
778
779                 shift -= RADIX_TREE_MAP_SHIFT;
780                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
781                 node = slot;
782                 slot = slot->slots[offset];
783         }
784
785         if (slot == NULL)
786                 goto out;
787
788         while (node) {
789                 if (!tag_get(node, tag, offset))
790                         goto out;
791                 tag_clear(node, tag, offset);
792                 if (any_tag_set(node, tag))
793                         goto out;
794
795                 index >>= RADIX_TREE_MAP_SHIFT;
796                 offset = index & RADIX_TREE_MAP_MASK;
797                 node = node->parent;
798         }
799
800         /* clear the root's tag bit */
801         if (root_tag_get(root, tag))
802                 root_tag_clear(root, tag);
803
804 out:
805         return slot;
806 }
807 EXPORT_SYMBOL(radix_tree_tag_clear);
808
809 /**
810  * radix_tree_tag_get - get a tag on a radix tree node
811  * @root:               radix tree root
812  * @index:              index key
813  * @tag:                tag index (< RADIX_TREE_MAX_TAGS)
814  *
815  * Return values:
816  *
817  *  0: tag not present or not set
818  *  1: tag set
819  *
820  * Note that the return value of this function may not be relied on, even if
821  * the RCU lock is held, unless tag modification and node deletion are excluded
822  * from concurrency.
823  */
824 int radix_tree_tag_get(struct radix_tree_root *root,
825                         unsigned long index, unsigned int tag)
826 {
827         unsigned int height, shift;
828         struct radix_tree_node *node;
829
830         /* check the root's tag bit */
831         if (!root_tag_get(root, tag))
832                 return 0;
833
834         node = rcu_dereference_raw(root->rnode);
835         if (node == NULL)
836                 return 0;
837
838         if (!radix_tree_is_indirect_ptr(node))
839                 return (index == 0);
840         node = indirect_to_ptr(node);
841
842         height = node->path & RADIX_TREE_HEIGHT_MASK;
843         if (index > radix_tree_maxindex(height))
844                 return 0;
845
846         shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
847
848         for ( ; ; ) {
849                 int offset;
850
851                 if (node == NULL)
852                         return 0;
853                 node = indirect_to_ptr(node);
854
855                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
856                 if (!tag_get(node, tag, offset))
857                         return 0;
858                 if (height == 1)
859                         return 1;
860                 node = rcu_dereference_raw(node->slots[offset]);
861                 if (!radix_tree_is_indirect_ptr(node))
862                         return 1;
863                 shift -= RADIX_TREE_MAP_SHIFT;
864                 height--;
865         }
866 }
867 EXPORT_SYMBOL(radix_tree_tag_get);
868
869 /**
870  * radix_tree_next_chunk - find next chunk of slots for iteration
871  *
872  * @root:       radix tree root
873  * @iter:       iterator state
874  * @flags:      RADIX_TREE_ITER_* flags and tag index
875  * Returns:     pointer to chunk first slot, or NULL if iteration is over
876  */
877 void **radix_tree_next_chunk(struct radix_tree_root *root,
878                              struct radix_tree_iter *iter, unsigned flags)
879 {
880         unsigned shift, tag = flags & RADIX_TREE_ITER_TAG_MASK;
881         struct radix_tree_node *rnode, *node;
882         unsigned long index, offset, height;
883
884         if ((flags & RADIX_TREE_ITER_TAGGED) && !root_tag_get(root, tag))
885                 return NULL;
886
887         /*
888          * Catch next_index overflow after ~0UL. iter->index never overflows
889          * during iterating; it can be zero only at the beginning.
890          * And we cannot overflow iter->next_index in a single step,
891          * because RADIX_TREE_MAP_SHIFT < BITS_PER_LONG.
892          *
893          * This condition also used by radix_tree_next_slot() to stop
894          * contiguous iterating, and forbid swithing to the next chunk.
895          */
896         index = iter->next_index;
897         if (!index && iter->index)
898                 return NULL;
899
900         rnode = rcu_dereference_raw(root->rnode);
901         if (radix_tree_is_indirect_ptr(rnode)) {
902                 rnode = indirect_to_ptr(rnode);
903         } else if (rnode && !index) {
904                 /* Single-slot tree */
905                 iter->index = 0;
906                 iter->next_index = 1;
907                 iter->tags = 1;
908                 return (void **)&root->rnode;
909         } else
910                 return NULL;
911
912 restart:
913         height = rnode->path & RADIX_TREE_HEIGHT_MASK;
914         shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
915         offset = index >> shift;
916
917         /* Index outside of the tree */
918         if (offset >= RADIX_TREE_MAP_SIZE)
919                 return NULL;
920
921         node = rnode;
922         while (1) {
923                 struct radix_tree_node *slot;
924                 if ((flags & RADIX_TREE_ITER_TAGGED) ?
925                                 !test_bit(offset, node->tags[tag]) :
926                                 !node->slots[offset]) {
927                         /* Hole detected */
928                         if (flags & RADIX_TREE_ITER_CONTIG)
929                                 return NULL;
930
931                         if (flags & RADIX_TREE_ITER_TAGGED)
932                                 offset = radix_tree_find_next_bit(
933                                                 node->tags[tag],
934                                                 RADIX_TREE_MAP_SIZE,
935                                                 offset + 1);
936                         else
937                                 while (++offset < RADIX_TREE_MAP_SIZE) {
938                                         if (node->slots[offset])
939                                                 break;
940                                 }
941                         index &= ~((RADIX_TREE_MAP_SIZE << shift) - 1);
942                         index += offset << shift;
943                         /* Overflow after ~0UL */
944                         if (!index)
945                                 return NULL;
946                         if (offset == RADIX_TREE_MAP_SIZE)
947                                 goto restart;
948                 }
949
950                 /* This is leaf-node */
951                 if (!shift)
952                         break;
953
954                 slot = rcu_dereference_raw(node->slots[offset]);
955                 if (slot == NULL)
956                         goto restart;
957                 if (!radix_tree_is_indirect_ptr(slot))
958                         break;
959                 node = indirect_to_ptr(slot);
960                 shift -= RADIX_TREE_MAP_SHIFT;
961                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
962         }
963
964         /* Update the iterator state */
965         iter->index = index;
966         iter->next_index = (index | RADIX_TREE_MAP_MASK) + 1;
967
968         /* Construct iter->tags bit-mask from node->tags[tag] array */
969         if (flags & RADIX_TREE_ITER_TAGGED) {
970                 unsigned tag_long, tag_bit;
971
972                 tag_long = offset / BITS_PER_LONG;
973                 tag_bit  = offset % BITS_PER_LONG;
974                 iter->tags = node->tags[tag][tag_long] >> tag_bit;
975                 /* This never happens if RADIX_TREE_TAG_LONGS == 1 */
976                 if (tag_long < RADIX_TREE_TAG_LONGS - 1) {
977                         /* Pick tags from next element */
978                         if (tag_bit)
979                                 iter->tags |= node->tags[tag][tag_long + 1] <<
980                                                 (BITS_PER_LONG - tag_bit);
981                         /* Clip chunk size, here only BITS_PER_LONG tags */
982                         iter->next_index = index + BITS_PER_LONG;
983                 }
984         }
985
986         return node->slots + offset;
987 }
988 EXPORT_SYMBOL(radix_tree_next_chunk);
989
990 /**
991  * radix_tree_range_tag_if_tagged - for each item in given range set given
992  *                                 tag if item has another tag set
993  * @root:               radix tree root
994  * @first_indexp:       pointer to a starting index of a range to scan
995  * @last_index:         last index of a range to scan
996  * @nr_to_tag:          maximum number items to tag
997  * @iftag:              tag index to test
998  * @settag:             tag index to set if tested tag is set
999  *
1000  * This function scans range of radix tree from first_index to last_index
1001  * (inclusive).  For each item in the range if iftag is set, the function sets
1002  * also settag. The function stops either after tagging nr_to_tag items or
1003  * after reaching last_index.
1004  *
1005  * The tags must be set from the leaf level only and propagated back up the
1006  * path to the root. We must do this so that we resolve the full path before
1007  * setting any tags on intermediate nodes. If we set tags as we descend, then
1008  * we can get to the leaf node and find that the index that has the iftag
1009  * set is outside the range we are scanning. This reults in dangling tags and
1010  * can lead to problems with later tag operations (e.g. livelocks on lookups).
1011  *
1012  * The function returns number of leaves where the tag was set and sets
1013  * *first_indexp to the first unscanned index.
1014  * WARNING! *first_indexp can wrap if last_index is ULONG_MAX. Caller must
1015  * be prepared to handle that.
1016  */
1017 unsigned long radix_tree_range_tag_if_tagged(struct radix_tree_root *root,
1018                 unsigned long *first_indexp, unsigned long last_index,
1019                 unsigned long nr_to_tag,
1020                 unsigned int iftag, unsigned int settag)
1021 {
1022         unsigned int height = root->height;
1023         struct radix_tree_node *node = NULL;
1024         struct radix_tree_node *slot;
1025         unsigned int shift;
1026         unsigned long tagged = 0;
1027         unsigned long index = *first_indexp;
1028
1029         last_index = min(last_index, radix_tree_maxindex(height));
1030         if (index > last_index)
1031                 return 0;
1032         if (!nr_to_tag)
1033                 return 0;
1034         if (!root_tag_get(root, iftag)) {
1035                 *first_indexp = last_index + 1;
1036                 return 0;
1037         }
1038         if (height == 0) {
1039                 *first_indexp = last_index + 1;
1040                 root_tag_set(root, settag);
1041                 return 1;
1042         }
1043
1044         shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
1045         slot = indirect_to_ptr(root->rnode);
1046
1047         for (;;) {
1048                 unsigned long upindex;
1049                 int offset;
1050
1051                 offset = (index >> shift) & RADIX_TREE_MAP_MASK;
1052                 if (!slot->slots[offset])
1053                         goto next;
1054                 if (!tag_get(slot, iftag, offset))
1055                         goto next;
1056                 if (shift) {
1057                         node = slot;
1058                         slot = slot->slots[offset];
1059                         if (radix_tree_is_indirect_ptr(slot)) {
1060                                 slot = indirect_to_ptr(slot);
1061                                 shift -= RADIX_TREE_MAP_SHIFT;
1062                                 continue;
1063                         } else {
1064                                 slot = node;
1065                                 node = node->parent;
1066                         }
1067                 }
1068
1069                 /* tag the leaf */
1070                 tagged += 1 << shift;
1071                 tag_set(slot, settag, offset);
1072
1073                 /* walk back up the path tagging interior nodes */
1074                 upindex = index;
1075                 while (node) {
1076                         upindex >>= RADIX_TREE_MAP_SHIFT;
1077                         offset = upindex & RADIX_TREE_MAP_MASK;
1078
1079                         /* stop if we find a node with the tag already set */
1080                         if (tag_get(node, settag, offset))
1081                                 break;
1082                         tag_set(node, settag, offset);
1083                         node = node->parent;
1084                 }
1085
1086                 /*
1087                  * Small optimization: now clear that node pointer.
1088                  * Since all of this slot's ancestors now have the tag set
1089                  * from setting it above, we have no further need to walk
1090                  * back up the tree setting tags, until we update slot to
1091                  * point to another radix_tree_node.
1092                  */
1093                 node = NULL;
1094
1095 next:
1096                 /* Go to next item at level determined by 'shift' */
1097                 index = ((index >> shift) + 1) << shift;
1098                 /* Overflow can happen when last_index is ~0UL... */
1099                 if (index > last_index || !index)
1100                         break;
1101                 if (tagged >= nr_to_tag)
1102                         break;
1103                 while (((index >> shift) & RADIX_TREE_MAP_MASK) == 0) {
1104                         /*
1105                          * We've fully scanned this node. Go up. Because
1106                          * last_index is guaranteed to be in the tree, what
1107                          * we do below cannot wander astray.
1108                          */
1109                         slot = slot->parent;
1110                         shift += RADIX_TREE_MAP_SHIFT;
1111                 }
1112         }
1113         /*
1114          * We need not to tag the root tag if there is no tag which is set with
1115          * settag within the range from *first_indexp to last_index.
1116          */
1117         if (tagged > 0)
1118                 root_tag_set(root, settag);
1119         *first_indexp = index;
1120
1121         return tagged;
1122 }
1123 EXPORT_SYMBOL(radix_tree_range_tag_if_tagged);
1124
1125 /**
1126  *      radix_tree_gang_lookup - perform multiple lookup on a radix tree
1127  *      @root:          radix tree root
1128  *      @results:       where the results of the lookup are placed
1129  *      @first_index:   start the lookup from this key
1130  *      @max_items:     place up to this many items at *results
1131  *
1132  *      Performs an index-ascending scan of the tree for present items.  Places
1133  *      them at *@results and returns the number of items which were placed at
1134  *      *@results.
1135  *
1136  *      The implementation is naive.
1137  *
1138  *      Like radix_tree_lookup, radix_tree_gang_lookup may be called under
1139  *      rcu_read_lock. In this case, rather than the returned results being
1140  *      an atomic snapshot of the tree at a single point in time, the semantics
1141  *      of an RCU protected gang lookup are as though multiple radix_tree_lookups
1142  *      have been issued in individual locks, and results stored in 'results'.
1143  */
1144 unsigned int
1145 radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
1146                         unsigned long first_index, unsigned int max_items)
1147 {
1148         struct radix_tree_iter iter;
1149         void **slot;
1150         unsigned int ret = 0;
1151
1152         if (unlikely(!max_items))
1153                 return 0;
1154
1155         radix_tree_for_each_slot(slot, root, &iter, first_index) {
1156                 results[ret] = rcu_dereference_raw(*slot);
1157                 if (!results[ret])
1158                         continue;
1159                 if (radix_tree_is_indirect_ptr(results[ret])) {
1160                         slot = radix_tree_iter_retry(&iter);
1161                         continue;
1162                 }
1163                 if (++ret == max_items)
1164                         break;
1165         }
1166
1167         return ret;
1168 }
1169 EXPORT_SYMBOL(radix_tree_gang_lookup);
1170
1171 /**
1172  *      radix_tree_gang_lookup_slot - perform multiple slot lookup on radix tree
1173  *      @root:          radix tree root
1174  *      @results:       where the results of the lookup are placed
1175  *      @indices:       where their indices should be placed (but usually NULL)
1176  *      @first_index:   start the lookup from this key
1177  *      @max_items:     place up to this many items at *results
1178  *
1179  *      Performs an index-ascending scan of the tree for present items.  Places
1180  *      their slots at *@results and returns the number of items which were
1181  *      placed at *@results.
1182  *
1183  *      The implementation is naive.
1184  *
1185  *      Like radix_tree_gang_lookup as far as RCU and locking goes. Slots must
1186  *      be dereferenced with radix_tree_deref_slot, and if using only RCU
1187  *      protection, radix_tree_deref_slot may fail requiring a retry.
1188  */
1189 unsigned int
1190 radix_tree_gang_lookup_slot(struct radix_tree_root *root,
1191                         void ***results, unsigned long *indices,
1192                         unsigned long first_index, unsigned int max_items)
1193 {
1194         struct radix_tree_iter iter;
1195         void **slot;
1196         unsigned int ret = 0;
1197
1198         if (unlikely(!max_items))
1199                 return 0;
1200
1201         radix_tree_for_each_slot(slot, root, &iter, first_index) {
1202                 results[ret] = slot;
1203                 if (indices)
1204                         indices[ret] = iter.index;
1205                 if (++ret == max_items)
1206                         break;
1207         }
1208
1209         return ret;
1210 }
1211 EXPORT_SYMBOL(radix_tree_gang_lookup_slot);
1212
1213 /**
1214  *      radix_tree_gang_lookup_tag - perform multiple lookup on a radix tree
1215  *                                   based on a tag
1216  *      @root:          radix tree root
1217  *      @results:       where the results of the lookup are placed
1218  *      @first_index:   start the lookup from this key
1219  *      @max_items:     place up to this many items at *results
1220  *      @tag:           the tag index (< RADIX_TREE_MAX_TAGS)
1221  *
1222  *      Performs an index-ascending scan of the tree for present items which
1223  *      have the tag indexed by @tag set.  Places the items at *@results and
1224  *      returns the number of items which were placed at *@results.
1225  */
1226 unsigned int
1227 radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results,
1228                 unsigned long first_index, unsigned int max_items,
1229                 unsigned int tag)
1230 {
1231         struct radix_tree_iter iter;
1232         void **slot;
1233         unsigned int ret = 0;
1234
1235         if (unlikely(!max_items))
1236                 return 0;
1237
1238         radix_tree_for_each_tagged(slot, root, &iter, first_index, tag) {
1239                 results[ret] = rcu_dereference_raw(*slot);
1240                 if (!results[ret])
1241                         continue;
1242                 if (radix_tree_is_indirect_ptr(results[ret])) {
1243                         slot = radix_tree_iter_retry(&iter);
1244                         continue;
1245                 }
1246                 if (++ret == max_items)
1247                         break;
1248         }
1249
1250         return ret;
1251 }
1252 EXPORT_SYMBOL(radix_tree_gang_lookup_tag);
1253
1254 /**
1255  *      radix_tree_gang_lookup_tag_slot - perform multiple slot lookup on a
1256  *                                        radix tree based on a tag
1257  *      @root:          radix tree root
1258  *      @results:       where the results of the lookup are placed
1259  *      @first_index:   start the lookup from this key
1260  *      @max_items:     place up to this many items at *results
1261  *      @tag:           the tag index (< RADIX_TREE_MAX_TAGS)
1262  *
1263  *      Performs an index-ascending scan of the tree for present items which
1264  *      have the tag indexed by @tag set.  Places the slots at *@results and
1265  *      returns the number of slots which were placed at *@results.
1266  */
1267 unsigned int
1268 radix_tree_gang_lookup_tag_slot(struct radix_tree_root *root, void ***results,
1269                 unsigned long first_index, unsigned int max_items,
1270                 unsigned int tag)
1271 {
1272         struct radix_tree_iter iter;
1273         void **slot;
1274         unsigned int ret = 0;
1275
1276         if (unlikely(!max_items))
1277                 return 0;
1278
1279         radix_tree_for_each_tagged(slot, root, &iter, first_index, tag) {
1280                 results[ret] = slot;
1281                 if (++ret == max_items)
1282                         break;
1283         }
1284
1285         return ret;
1286 }
1287 EXPORT_SYMBOL(radix_tree_gang_lookup_tag_slot);
1288
1289 #if defined(CONFIG_SHMEM) && defined(CONFIG_SWAP)
1290 #include <linux/sched.h> /* for cond_resched() */
1291
1292 /*
1293  * This linear search is at present only useful to shmem_unuse_inode().
1294  */
1295 static unsigned long __locate(struct radix_tree_node *slot, void *item,
1296                               unsigned long index, unsigned long *found_index)
1297 {
1298         unsigned int shift, height;
1299         unsigned long i;
1300
1301         height = slot->path & RADIX_TREE_HEIGHT_MASK;
1302         shift = (height-1) * RADIX_TREE_MAP_SHIFT;
1303
1304         for ( ; height > 1; height--) {
1305                 i = (index >> shift) & RADIX_TREE_MAP_MASK;
1306                 for (;;) {
1307                         if (slot->slots[i] != NULL)
1308                                 break;
1309                         index &= ~((1UL << shift) - 1);
1310                         index += 1UL << shift;
1311                         if (index == 0)
1312                                 goto out;       /* 32-bit wraparound */
1313                         i++;
1314                         if (i == RADIX_TREE_MAP_SIZE)
1315                                 goto out;
1316                 }
1317
1318                 slot = rcu_dereference_raw(slot->slots[i]);
1319                 if (slot == NULL)
1320                         goto out;
1321                 if (!radix_tree_is_indirect_ptr(slot)) {
1322                         if (slot == item) {
1323                                 *found_index = index + i;
1324                                 index = 0;
1325                         } else {
1326                                 index += shift;
1327                         }
1328                         goto out;
1329                 }
1330                 slot = indirect_to_ptr(slot);
1331                 shift -= RADIX_TREE_MAP_SHIFT;
1332         }
1333
1334         /* Bottom level: check items */
1335         for (i = 0; i < RADIX_TREE_MAP_SIZE; i++) {
1336                 if (slot->slots[i] == item) {
1337                         *found_index = index + i;
1338                         index = 0;
1339                         goto out;
1340                 }
1341         }
1342         index += RADIX_TREE_MAP_SIZE;
1343 out:
1344         return index;
1345 }
1346
1347 /**
1348  *      radix_tree_locate_item - search through radix tree for item
1349  *      @root:          radix tree root
1350  *      @item:          item to be found
1351  *
1352  *      Returns index where item was found, or -1 if not found.
1353  *      Caller must hold no lock (since this time-consuming function needs
1354  *      to be preemptible), and must check afterwards if item is still there.
1355  */
1356 unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item)
1357 {
1358         struct radix_tree_node *node;
1359         unsigned long max_index;
1360         unsigned long cur_index = 0;
1361         unsigned long found_index = -1;
1362
1363         do {
1364                 rcu_read_lock();
1365                 node = rcu_dereference_raw(root->rnode);
1366                 if (!radix_tree_is_indirect_ptr(node)) {
1367                         rcu_read_unlock();
1368                         if (node == item)
1369                                 found_index = 0;
1370                         break;
1371                 }
1372
1373                 node = indirect_to_ptr(node);
1374                 max_index = radix_tree_maxindex(node->path &
1375                                                 RADIX_TREE_HEIGHT_MASK);
1376                 if (cur_index > max_index) {
1377                         rcu_read_unlock();
1378                         break;
1379                 }
1380
1381                 cur_index = __locate(node, item, cur_index, &found_index);
1382                 rcu_read_unlock();
1383                 cond_resched();
1384         } while (cur_index != 0 && cur_index <= max_index);
1385
1386         return found_index;
1387 }
1388 #else
1389 unsigned long radix_tree_locate_item(struct radix_tree_root *root, void *item)
1390 {
1391         return -1;
1392 }
1393 #endif /* CONFIG_SHMEM && CONFIG_SWAP */
1394
1395 /**
1396  *      radix_tree_shrink    -    shrink height of a radix tree to minimal
1397  *      @root           radix tree root
1398  */
1399 static inline void radix_tree_shrink(struct radix_tree_root *root)
1400 {
1401         /* try to shrink tree height */
1402         while (root->height > 0) {
1403                 struct radix_tree_node *to_free = root->rnode;
1404                 struct radix_tree_node *slot;
1405
1406                 BUG_ON(!radix_tree_is_indirect_ptr(to_free));
1407                 to_free = indirect_to_ptr(to_free);
1408
1409                 /*
1410                  * The candidate node has more than one child, or its child
1411                  * is not at the leftmost slot, or it is a multiorder entry,
1412                  * we cannot shrink.
1413                  */
1414                 if (to_free->count != 1)
1415                         break;
1416                 slot = to_free->slots[0];
1417                 if (!slot)
1418                         break;
1419
1420                 /*
1421                  * We don't need rcu_assign_pointer(), since we are simply
1422                  * moving the node from one part of the tree to another: if it
1423                  * was safe to dereference the old pointer to it
1424                  * (to_free->slots[0]), it will be safe to dereference the new
1425                  * one (root->rnode) as far as dependent read barriers go.
1426                  */
1427                 if (root->height > 1) {
1428                         if (!radix_tree_is_indirect_ptr(slot))
1429                                 break;
1430
1431                         slot = indirect_to_ptr(slot);
1432                         slot->parent = NULL;
1433                         slot = ptr_to_indirect(slot);
1434                 }
1435                 root->rnode = slot;
1436                 root->height--;
1437
1438                 /*
1439                  * We have a dilemma here. The node's slot[0] must not be
1440                  * NULLed in case there are concurrent lookups expecting to
1441                  * find the item. However if this was a bottom-level node,
1442                  * then it may be subject to the slot pointer being visible
1443                  * to callers dereferencing it. If item corresponding to
1444                  * slot[0] is subsequently deleted, these callers would expect
1445                  * their slot to become empty sooner or later.
1446                  *
1447                  * For example, lockless pagecache will look up a slot, deref
1448                  * the page pointer, and if the page is 0 refcount it means it
1449                  * was concurrently deleted from pagecache so try the deref
1450                  * again. Fortunately there is already a requirement for logic
1451                  * to retry the entire slot lookup -- the indirect pointer
1452                  * problem (replacing direct root node with an indirect pointer
1453                  * also results in a stale slot). So tag the slot as indirect
1454                  * to force callers to retry.
1455                  */
1456                 if (root->height == 0)
1457                         *((unsigned long *)&to_free->slots[0]) |=
1458                                                 RADIX_TREE_INDIRECT_PTR;
1459
1460                 radix_tree_node_free(to_free);
1461         }
1462 }
1463
1464 /**
1465  *      __radix_tree_delete_node    -    try to free node after clearing a slot
1466  *      @root:          radix tree root
1467  *      @node:          node containing @index
1468  *
1469  *      After clearing the slot at @index in @node from radix tree
1470  *      rooted at @root, call this function to attempt freeing the
1471  *      node and shrinking the tree.
1472  *
1473  *      Returns %true if @node was freed, %false otherwise.
1474  */
1475 bool __radix_tree_delete_node(struct radix_tree_root *root,
1476                               struct radix_tree_node *node)
1477 {
1478         bool deleted = false;
1479
1480         do {
1481                 struct radix_tree_node *parent;
1482
1483                 if (node->count) {
1484                         if (node == indirect_to_ptr(root->rnode)) {
1485                                 radix_tree_shrink(root);
1486                                 if (root->height == 0)
1487                                         deleted = true;
1488                         }
1489                         return deleted;
1490                 }
1491
1492                 parent = node->parent;
1493                 if (parent) {
1494                         unsigned int offset;
1495
1496                         offset = node->path >> RADIX_TREE_HEIGHT_SHIFT;
1497                         parent->slots[offset] = NULL;
1498                         parent->count--;
1499                 } else {
1500                         root_tag_clear_all(root);
1501                         root->height = 0;
1502                         root->rnode = NULL;
1503                 }
1504
1505                 radix_tree_node_free(node);
1506                 deleted = true;
1507
1508                 node = parent;
1509         } while (node);
1510
1511         return deleted;
1512 }
1513
1514 static inline void delete_sibling_entries(struct radix_tree_node *node,
1515                                         void *ptr, unsigned offset)
1516 {
1517 #ifdef CONFIG_RADIX_TREE_MULTIORDER
1518         int i;
1519         for (i = 1; offset + i < RADIX_TREE_MAP_SIZE; i++) {
1520                 if (node->slots[offset + i] != ptr)
1521                         break;
1522                 node->slots[offset + i] = NULL;
1523                 node->count--;
1524         }
1525 #endif
1526 }
1527
1528 /**
1529  *      radix_tree_delete_item    -    delete an item from a radix tree
1530  *      @root:          radix tree root
1531  *      @index:         index key
1532  *      @item:          expected item
1533  *
1534  *      Remove @item at @index from the radix tree rooted at @root.
1535  *
1536  *      Returns the address of the deleted item, or NULL if it was not present
1537  *      or the entry at the given @index was not @item.
1538  */
1539 void *radix_tree_delete_item(struct radix_tree_root *root,
1540                              unsigned long index, void *item)
1541 {
1542         struct radix_tree_node *node;
1543         unsigned int offset;
1544         void **slot;
1545         void *entry;
1546         int tag;
1547
1548         entry = __radix_tree_lookup(root, index, &node, &slot);
1549         if (!entry)
1550                 return NULL;
1551
1552         if (item && entry != item)
1553                 return NULL;
1554
1555         if (!node) {
1556                 root_tag_clear_all(root);
1557                 root->rnode = NULL;
1558                 return entry;
1559         }
1560
1561         offset = get_slot_offset(node, slot);
1562
1563         /*
1564          * Clear all tags associated with the item to be deleted.
1565          * This way of doing it would be inefficient, but seldom is any set.
1566          */
1567         for (tag = 0; tag < RADIX_TREE_MAX_TAGS; tag++) {
1568                 if (tag_get(node, tag, offset))
1569                         radix_tree_tag_clear(root, index, tag);
1570         }
1571
1572         delete_sibling_entries(node, ptr_to_indirect(slot), offset);
1573         node->slots[offset] = NULL;
1574         node->count--;
1575
1576         __radix_tree_delete_node(root, node);
1577
1578         return entry;
1579 }
1580 EXPORT_SYMBOL(radix_tree_delete_item);
1581
1582 /**
1583  *      radix_tree_delete    -    delete an item from a radix tree
1584  *      @root:          radix tree root
1585  *      @index:         index key
1586  *
1587  *      Remove the item at @index from the radix tree rooted at @root.
1588  *
1589  *      Returns the address of the deleted item, or NULL if it was not present.
1590  */
1591 void *radix_tree_delete(struct radix_tree_root *root, unsigned long index)
1592 {
1593         return radix_tree_delete_item(root, index, NULL);
1594 }
1595 EXPORT_SYMBOL(radix_tree_delete);
1596
1597 /**
1598  *      radix_tree_tagged - test whether any items in the tree are tagged
1599  *      @root:          radix tree root
1600  *      @tag:           tag to test
1601  */
1602 int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag)
1603 {
1604         return root_tag_get(root, tag);
1605 }
1606 EXPORT_SYMBOL(radix_tree_tagged);
1607
1608 static void
1609 radix_tree_node_ctor(void *arg)
1610 {
1611         struct radix_tree_node *node = arg;
1612
1613         memset(node, 0, sizeof(*node));
1614         INIT_LIST_HEAD(&node->private_list);
1615 }
1616
1617 static __init unsigned long __maxindex(unsigned int height)
1618 {
1619         unsigned int width = height * RADIX_TREE_MAP_SHIFT;
1620         int shift = RADIX_TREE_INDEX_BITS - width;
1621
1622         if (shift < 0)
1623                 return ~0UL;
1624         if (shift >= BITS_PER_LONG)
1625                 return 0UL;
1626         return ~0UL >> shift;
1627 }
1628
1629 static __init void radix_tree_init_maxindex(void)
1630 {
1631         unsigned int i;
1632
1633         for (i = 0; i < ARRAY_SIZE(height_to_maxindex); i++)
1634                 height_to_maxindex[i] = __maxindex(i);
1635 }
1636
1637 static int radix_tree_callback(struct notifier_block *nfb,
1638                             unsigned long action,
1639                             void *hcpu)
1640 {
1641        int cpu = (long)hcpu;
1642        struct radix_tree_preload *rtp;
1643        struct radix_tree_node *node;
1644
1645        /* Free per-cpu pool of perloaded nodes */
1646        if (action == CPU_DEAD || action == CPU_DEAD_FROZEN) {
1647                rtp = &per_cpu(radix_tree_preloads, cpu);
1648                while (rtp->nr) {
1649                         node = rtp->nodes;
1650                         rtp->nodes = node->private_data;
1651                         kmem_cache_free(radix_tree_node_cachep, node);
1652                         rtp->nr--;
1653                }
1654        }
1655        return NOTIFY_OK;
1656 }
1657
1658 void __init radix_tree_init(void)
1659 {
1660         radix_tree_node_cachep = kmem_cache_create("radix_tree_node",
1661                         sizeof(struct radix_tree_node), 0,
1662                         SLAB_PANIC | SLAB_RECLAIM_ACCOUNT,
1663                         radix_tree_node_ctor);
1664         radix_tree_init_maxindex();
1665         hotcpu_notifier(radix_tree_callback, 0);
1666 }