forked from luck/tmp_suning_uos_patched
[ROSE]: Fix routing table locking in rose_remove_neigh.
The locking rule for rose_remove_neigh() are that the caller needs to hold rose_neigh_list_lock, so we better don't take it yet again in rose_neigh_list_lock. Signed-off-by: Ralf Baechle <ralf@linux-mips.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
70868eace5
commit
4cc7c2734e
|
@ -233,11 +233,8 @@ 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;
|
||||
|
@ -246,7 +243,6 @@ 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;
|
||||
|
@ -254,7 +250,6 @@ static void rose_remove_neigh(struct rose_neigh *rose_neigh)
|
|||
|
||||
s = s->next;
|
||||
}
|
||||
spin_unlock_bh(&rose_neigh_list_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue
Block a user