diff options
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/bearer.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 3fef7eb776dc..dfb4c7fe4865 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c | |||
@@ -535,7 +535,7 @@ static int tipc_l2_rcv_msg(struct sk_buff *buf, struct net_device *dev, | |||
535 | } | 535 | } |
536 | 536 | ||
537 | rcu_read_lock(); | 537 | rcu_read_lock(); |
538 | b_ptr = rcu_dereference(dev->tipc_ptr); | 538 | b_ptr = rcu_dereference_rtnl(dev->tipc_ptr); |
539 | if (likely(b_ptr)) { | 539 | if (likely(b_ptr)) { |
540 | if (likely(buf->pkt_type <= PACKET_BROADCAST)) { | 540 | if (likely(buf->pkt_type <= PACKET_BROADCAST)) { |
541 | buf->next = NULL; | 541 | buf->next = NULL; |
@@ -568,12 +568,9 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt, | |||
568 | if (!net_eq(dev_net(dev), &init_net)) | 568 | if (!net_eq(dev_net(dev), &init_net)) |
569 | return NOTIFY_DONE; | 569 | return NOTIFY_DONE; |
570 | 570 | ||
571 | rcu_read_lock(); | 571 | b_ptr = rtnl_dereference(dev->tipc_ptr); |
572 | b_ptr = rcu_dereference(dev->tipc_ptr); | 572 | if (!b_ptr) |
573 | if (!b_ptr) { | ||
574 | rcu_read_unlock(); | ||
575 | return NOTIFY_DONE; | 573 | return NOTIFY_DONE; |
576 | } | ||
577 | 574 | ||
578 | b_ptr->mtu = dev->mtu; | 575 | b_ptr->mtu = dev->mtu; |
579 | 576 | ||
@@ -595,8 +592,6 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt, | |||
595 | tipc_disable_bearer(b_ptr->name); | 592 | tipc_disable_bearer(b_ptr->name); |
596 | break; | 593 | break; |
597 | } | 594 | } |
598 | rcu_read_unlock(); | ||
599 | |||
600 | return NOTIFY_OK; | 595 | return NOTIFY_OK; |
601 | } | 596 | } |
602 | 597 | ||