diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c index b94cb2ffbaf8..a9ae329d598e 100644 --- a/net/netrom/nr_route.c +++ b/net/netrom/nr_route.c @@ -331,7 +331,6 @@ static int nr_del_node(ax25_address *callsign, ax25_address *neighbour, struct n return -EINVAL; } - spin_lock_bh(&nr_node_list_lock); nr_node_lock(nr_node); for (i = 0; i < nr_node->count; i++) { if (nr_node->routes[i].neighbour == nr_neigh) { @@ -345,7 +344,9 @@ static int nr_del_node(ax25_address *callsign, ax25_address *neighbour, struct n nr_node->count--; if (nr_node->count == 0) { + spin_lock_bh(&nr_node_list_lock); nr_remove_node_locked(nr_node); + spin_unlock_bh(&nr_node_list_lock); } else { switch (i) { case 0: @@ -360,14 +361,12 @@ static int nr_del_node(ax25_address *callsign, ax25_address *neighbour, struct n nr_node_put(nr_node); } nr_node_unlock(nr_node); - spin_unlock_bh(&nr_node_list_lock); return 0; } } nr_neigh_put(nr_neigh); nr_node_unlock(nr_node); - spin_unlock_bh(&nr_node_list_lock); nr_node_put(nr_node); return -EINVAL;