Merge svn revisions 924 and 925 from Zebra CVS. Also remove useless
ospf6_lsdb prototype declaration from ospf6_lsa.h. Report sent to Yasuhiro
Ohara as well.
diff --git a/ospf6d/ospf6d.c b/ospf6d/ospf6d.c
index 6cc0764..28e6b94 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -50,92 +50,29 @@
 {
 }
 
-static struct route_node *
-_route_next_until (struct route_node *node, struct route_node *limit)
-{
-  struct route_node *next;
-  struct route_node *start;
-
-  /* Node may be deleted from route_unlock_node so we have to preserve
-     next node's pointer. */
-
-  if (node->l_left)
-    {
-      next = node->l_left;
-      if (next == limit)
-        {
-          route_unlock_node (node);
-          return NULL;
-        }
-      route_lock_node (next);
-      route_unlock_node (node);
-      return next;
-    }
-  if (node->l_right)
-    {
-      next = node->l_right;
-      if (next == limit)
-        {
-          route_unlock_node (node);
-          return NULL;
-        }
-      route_lock_node (next);
-      route_unlock_node (node);
-      return next;
-    }
-
-  start = node;
-  while (node->parent)
-    {
-      if (node->parent->l_left == node && node->parent->l_right)
-	{
-	  next = node->parent->l_right;
-          if (next == limit)
-            {
-              route_unlock_node (start);
-              return NULL;
-            }
-	  route_lock_node (next);
-	  route_unlock_node (start);
-	  return next;
-	}
-      node = node->parent;
-    }
-
-  route_unlock_node (start);
-  return NULL;
-}
-
 struct route_node *
 route_prev (struct route_node *node)
 {
   struct route_node *end;
   struct route_node *prev = NULL;
 
-  if (node->parent == NULL)
-    {
-      route_unlock_node (node);
-      return NULL;
-    }
-
-  if (node->parent->l_left == node)
-    {
-      prev = node->parent;
-      route_lock_node (prev);
-      route_unlock_node (node);
-      return prev;
-    }
-
   end = node;
   node = node->parent;
-  route_lock_node (node);
+  if (node)
+    route_lock_node (node);
   while (node)
     {
       prev = node;
-      node = _route_next_until (node, end);
+      node = route_next (node);
+      if (node == end)
+        {
+          route_unlock_node (node);
+          node = NULL;
+        }
     }
   route_unlock_node (end);
-  route_lock_node (prev);
+  if (prev)
+    route_lock_node (prev);
 
   return prev;
 }