git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
net
/
rose
/
rose_route.c
diff --git
a/net/rose/rose_route.c
b/net/rose/rose_route.c
index
a22542f
..
8631b65
100644
(file)
--- 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;
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.
/*
* 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);
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;
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;
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;
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;
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;
}
s = s->next;
}
+ spin_unlock_bh(&rose_neigh_list_lock);
}
/*
}
/*