X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Frose%2Frose_route.c;h=8631b65a7312c830d35e4d843163024432bac54e;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=a22542fa1bc848cedef82a914a49f40ededae771;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/net/rose/rose_route.c b/net/rose/rose_route.c index a22542fa1..8631b65a7 100644 --- a/net/rose/rose_route.c +++ b/net/rose/rose_route.c @@ -48,6 +48,8 @@ static DEFINE_SPINLOCK(rose_route_list_lock); struct rose_neigh *rose_loopback_neigh; +static void rose_remove_neigh(struct rose_neigh *); + /* * Add a new route to a node, and in the process add the node and the * neighbour if it is new. @@ -233,8 +235,11 @@ static void rose_remove_neigh(struct rose_neigh *rose_neigh) skb_queue_purge(&rose_neigh->queue); + spin_lock_bh(&rose_neigh_list_lock); + if ((s = rose_neigh_list) == rose_neigh) { rose_neigh_list = rose_neigh->next; + spin_unlock_bh(&rose_neigh_list_lock); kfree(rose_neigh->digipeat); kfree(rose_neigh); return; @@ -243,6 +248,7 @@ static void rose_remove_neigh(struct rose_neigh *rose_neigh) while (s != NULL && s->next != NULL) { if (s->next == rose_neigh) { s->next = rose_neigh->next; + spin_unlock_bh(&rose_neigh_list_lock); kfree(rose_neigh->digipeat); kfree(rose_neigh); return; @@ -250,6 +256,7 @@ static void rose_remove_neigh(struct rose_neigh *rose_neigh) s = s->next; } + spin_unlock_bh(&rose_neigh_list_lock); } /*