in6_addroute is called through rnh_addadr which is always called with the radix node head lock held
exclusively. Pass RTF_RNH_LOCKED to rtalloc so that rtalloc1_fib will not try to re-acquire the lock.
This commit is contained in:
parent
05156b9b7e
commit
41c6def2d1
@ -160,7 +160,7 @@ in6_addroute(void *v_arg, void *n_arg, struct radix_node_head *head,
|
||||
* Find out if it is because of an
|
||||
* ARP entry and delete it if so.
|
||||
*/
|
||||
rt2 = rtalloc1((struct sockaddr *)sin6, 0, RTF_CLONING);
|
||||
rt2 = rtalloc1((struct sockaddr *)sin6, 0, RTF_RNH_LOCKED|RTF_CLONING);
|
||||
if (rt2) {
|
||||
if (rt2->rt_flags & RTF_LLINFO &&
|
||||
rt2->rt_flags & RTF_HOST &&
|
||||
@ -187,7 +187,7 @@ in6_addroute(void *v_arg, void *n_arg, struct radix_node_head *head,
|
||||
* net route entry, 3ffe:0501:: -> if0.
|
||||
* This case should not raise an error.
|
||||
*/
|
||||
rt2 = rtalloc1((struct sockaddr *)sin6, 0, RTF_CLONING);
|
||||
rt2 = rtalloc1((struct sockaddr *)sin6, 0, RTF_RNH_LOCKED|RTF_CLONING);
|
||||
if (rt2) {
|
||||
if ((rt2->rt_flags & (RTF_CLONING|RTF_HOST|RTF_GATEWAY))
|
||||
== RTF_CLONING
|
||||
|
Loading…
Reference in New Issue
Block a user