aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/idr.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/idr.c b/lib/idr.c
index ca5aa000d6c3..b8602e0b30da 100644
--- a/lib/idr.c
+++ b/lib/idr.c
@@ -436,15 +436,6 @@ EXPORT_SYMBOL(idr_remove);
436/** 436/**
437 * idr_remove_all - remove all ids from the given idr tree 437 * idr_remove_all - remove all ids from the given idr tree
438 * @idp: idr handle 438 * @idp: idr handle
439 *
440 * idr_destroy() only frees up unused, cached idp_layers, but this
441 * function will remove all id mappings and leave all idp_layers
442 * unused.
443 *
444 * A typical clean-up sequence for objects stored in an idr tree will
445 * use idr_for_each() to free all objects, if necessay, then
446 * idr_remove_all() to remove all ids, and idr_destroy() to free
447 * up the cached idr_layers.
448 */ 439 */
449void idr_remove_all(struct idr *idp) 440void idr_remove_all(struct idr *idp)
450{ 441{
@@ -484,9 +475,20 @@ EXPORT_SYMBOL(idr_remove_all);
484/** 475/**
485 * idr_destroy - release all cached layers within an idr tree 476 * idr_destroy - release all cached layers within an idr tree
486 * @idp: idr handle 477 * @idp: idr handle
478 *
479 * Free all id mappings and all idp_layers. After this function, @idp is
480 * completely unused and can be freed / recycled. The caller is
481 * responsible for ensuring that no one else accesses @idp during or after
482 * idr_destroy().
483 *
484 * A typical clean-up sequence for objects stored in an idr tree will use
485 * idr_for_each() to free all objects, if necessay, then idr_destroy() to
486 * free up the id mappings and cached idr_layers.
487 */ 487 */
488void idr_destroy(struct idr *idp) 488void idr_destroy(struct idr *idp)
489{ 489{
490 idr_remove_all(idp);
491
490 while (idp->id_free_cnt) { 492 while (idp->id_free_cnt) {
491 struct idr_layer *p = get_from_free_list(idp); 493 struct idr_layer *p = get_from_free_list(idp);
492 kmem_cache_free(idr_layer_cache, p); 494 kmem_cache_free(idr_layer_cache, p);