aboutsummaryrefslogtreecommitdiffstats
path: root/module/avl
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2017-10-05 19:28:00 -0700
committerGitHub <[email protected]>2017-10-05 19:28:00 -0700
commitc11f1004d19dd74e4be8869d211639413293dea0 (patch)
tree9439f61bd52ea25d564be16a4a37ea5002a16019 /module/avl
parent39f56627ae988d09b4e3803c01c22b2026b2310e (diff)
Remove dead code from AVL tree
The avl_update_* functions are never used by ZFS and are therefore being removed. They're barely even used in Illumos. Additionally, simplify avl_add() by using a VERIFY which produces exactly the same behavior under Linux. Reviewed-by: George Melikov <[email protected]> Reviewed-by: Giuseppe Di Natale <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #6716
Diffstat (limited to 'module/avl')
-rw-r--r--module/avl/avl.c75
1 files changed, 4 insertions, 71 deletions
diff --git a/module/avl/avl.c b/module/avl/avl.c
index 7a79f3785..f024cdf61 100644
--- a/module/avl/avl.c
+++ b/module/avl/avl.c
@@ -626,25 +626,16 @@ avl_insert_here(
}
/*
- * Add a new node to an AVL tree.
+ * Add a new node to an AVL tree. Strictly enforce that no duplicates can
+ * be added to the tree with a VERIFY which is enabled for non-DEBUG builds.
*/
void
avl_add(avl_tree_t *tree, void *new_node)
{
avl_index_t where = 0;
- /*
- * This is unfortunate. We want to call panic() here, even for
- * non-DEBUG kernels. In userland, however, we can't depend on anything
- * in libc or else the rtld build process gets confused. So, all we can
- * do in userland is resort to a normal ASSERT().
- */
- if (avl_find(tree, new_node, &where) != NULL)
-#ifdef _KERNEL
- panic("avl_find() succeeded inside avl_add()");
-#else
- ASSERT(0);
-#endif
+ VERIFY(avl_find(tree, new_node, &where) == NULL);
+
avl_insert(tree, new_node, where);
}
@@ -817,64 +808,6 @@ avl_remove(avl_tree_t *tree, void *data)
} while (parent != NULL);
}
-#define AVL_REINSERT(tree, obj) \
- avl_remove((tree), (obj)); \
- avl_add((tree), (obj))
-
-boolean_t
-avl_update_lt(avl_tree_t *t, void *obj)
-{
- void *neighbor;
-
- ASSERT(((neighbor = AVL_NEXT(t, obj)) == NULL) ||
- (t->avl_compar(obj, neighbor) <= 0));
-
- neighbor = AVL_PREV(t, obj);
- if ((neighbor != NULL) && (t->avl_compar(obj, neighbor) < 0)) {
- AVL_REINSERT(t, obj);
- return (B_TRUE);
- }
-
- return (B_FALSE);
-}
-
-boolean_t
-avl_update_gt(avl_tree_t *t, void *obj)
-{
- void *neighbor;
-
- ASSERT(((neighbor = AVL_PREV(t, obj)) == NULL) ||
- (t->avl_compar(obj, neighbor) >= 0));
-
- neighbor = AVL_NEXT(t, obj);
- if ((neighbor != NULL) && (t->avl_compar(obj, neighbor) > 0)) {
- AVL_REINSERT(t, obj);
- return (B_TRUE);
- }
-
- return (B_FALSE);
-}
-
-boolean_t
-avl_update(avl_tree_t *t, void *obj)
-{
- void *neighbor;
-
- neighbor = AVL_PREV(t, obj);
- if ((neighbor != NULL) && (t->avl_compar(obj, neighbor) < 0)) {
- AVL_REINSERT(t, obj);
- return (B_TRUE);
- }
-
- neighbor = AVL_NEXT(t, obj);
- if ((neighbor != NULL) && (t->avl_compar(obj, neighbor) > 0)) {
- AVL_REINSERT(t, obj);
- return (B_TRUE);
- }
-
- return (B_FALSE);
-}
-
void
avl_swap(avl_tree_t *tree1, avl_tree_t *tree2)
{