Index: kernel/generic/src/adt/avl.c
===================================================================
--- kernel/generic/src/adt/avl.c	(revision 83a5cba0066dd013f87382960bf1e6ac17b2ea89)
+++ kernel/generic/src/adt/avl.c	(revision 267ab565a400a2f05671ebf137daf78b42d99ab7)
@@ -686,22 +686,42 @@
 }
 
-static void _avltree_walk(avltree_node_t *node, avltree_walker_t walker)
+/** Walk a subtree of an AVL tree in-order and apply a supplied walker on each
+ * visited node.
+ *
+ * @param node		Node representing the root of an AVL subtree to be
+ * 			walked.
+ * @param walker	Walker function that will be appliad on each visited
+ * 			node.
+ * @param arg		Argument for the walker.
+ *
+ * @return		Zero if the walk should stop or non-zero otherwise.
+ */
+static bool _avltree_walk(avltree_node_t *node, avltree_walker_t walker,
+    void *arg)
 {
-	if (node->lft)
-		_avltree_walk(node->lft, walker);
-	walker(node);
-	if (node->rgt)
-		_avltree_walk(node->rgt, walker);
+	if (node->lft) {
+		if (!_avltree_walk(node->lft, walker, arg))
+			return false;
+	}
+	if (!walker(node, arg))
+		return false;
+	if (node->rgt) {
+		if (!_avltree_walk(node->rgt, walker, arg))
+			return false;
+	}
+	return true;
 }
 
-/** Walk the AVL tree and apply the walker function on each visited node.
+/** Walk the AVL tree in-order and apply the walker function on each visited
+ * node.
  *
  * @param t		AVL tree to be walked.
  * @param walker	Walker function that will be called on each visited
  * 			node.
- */
-void avltree_walk(avltree_t *t, avltree_walker_t walker)
+ * @param arg		Argument for the walker.
+ */
+void avltree_walk(avltree_t *t, avltree_walker_t walker, void *arg)
 {
-	_avltree_walk(t->root, walker);
+	_avltree_walk(t->root, walker, arg);
 }
 
