--- x/net/netrom/nr_route.c
+++ y/net/netrom/nr_route.c
@@ -100,6 +100,7 @@ static int __must_check nr_add_node(ax25
 {
 	struct nr_node  *nr_node;
 	struct nr_neigh *nr_neigh;
+	struct nr_neigh *victim = NULL;
 	int i, found;
 	struct net_device *odev;
 
@@ -243,10 +244,9 @@ static int __must_check nr_add_node(ax25
 			/* It must be better than the worst */
 			if (quality > nr_node->routes[2].quality) {
 				nr_node->routes[2].neighbour->count--;
-				nr_neigh_put(nr_node->routes[2].neighbour);
 
 				if (nr_node->routes[2].neighbour->count == 0 && !nr_node->routes[2].neighbour->locked)
-					nr_remove_neigh(nr_node->routes[2].neighbour);
+					victim = nr_node->routes[2].neighbour;
 
 				nr_node->routes[2].quality   = quality;
 				nr_node->routes[2].obs_count = obs_count;
@@ -281,6 +281,8 @@ static int __must_check nr_add_node(ax25
 
 	nr_neigh_put(nr_neigh);
 	nr_node_unlock(nr_node);
+	if (victim)
+		nr_remove_neigh(victim);
 	nr_node_put(nr_node);
 	return 0;
 }