mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	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 <mail@gmelikov.ru> Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #6716
This commit is contained in:
		
							parent
							
								
									39f56627ae
								
							
						
					
					
						commit
						c11f1004d1
					
				| @ -259,17 +259,6 @@ extern void avl_add(avl_tree_t *tree, void *node); | ||||
|  */ | ||||
| extern void avl_remove(avl_tree_t *tree, void *node); | ||||
| 
 | ||||
| /*
 | ||||
|  * Reinsert a node only if its order has changed relative to its nearest | ||||
|  * neighbors. To optimize performance avl_update_lt() checks only the previous | ||||
|  * node and avl_update_gt() checks only the next node. Use avl_update_lt() and | ||||
|  * avl_update_gt() only if you know the direction in which the order of the | ||||
|  * node may change. | ||||
|  */ | ||||
| extern boolean_t avl_update(avl_tree_t *, void *); | ||||
| extern boolean_t avl_update_lt(avl_tree_t *, void *); | ||||
| extern boolean_t avl_update_gt(avl_tree_t *, void *); | ||||
| 
 | ||||
| /*
 | ||||
|  * Swaps the contents of the two trees. | ||||
|  */ | ||||
|  | ||||
| @ -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) | ||||
| { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Brian Behlendorf
						Brian Behlendorf