--- x/net/netrom/nr_route.c +++ y/net/netrom/nr_route.c @@ -331,6 +331,7 @@ static int nr_del_node(ax25_address *cal return -EINVAL; } + spin_lock_bh(&nr_neigh_list_lock); spin_lock_bh(&nr_node_list_lock); nr_node_lock(nr_node); for (i = 0; i < nr_node->count; i++) { @@ -339,7 +340,7 @@ static int nr_del_node(ax25_address *cal nr_neigh_put(nr_neigh); if (nr_neigh->count == 0 && !nr_neigh->locked) - nr_remove_neigh(nr_neigh); + __nr_remove_neigh(nr_neigh); nr_neigh_put(nr_neigh); nr_node->count--; @@ -361,6 +362,7 @@ static int nr_del_node(ax25_address *cal } nr_node_unlock(nr_node); spin_unlock_bh(&nr_node_list_lock); + spin_unlock_bh(&nr_neigh_list_lock); return 0; } @@ -368,6 +370,7 @@ static int nr_del_node(ax25_address *cal nr_neigh_put(nr_neigh); nr_node_unlock(nr_node); spin_unlock_bh(&nr_node_list_lock); + spin_unlock_bh(&nr_neigh_list_lock); nr_node_put(nr_node); return -EINVAL;