aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/bearer.c11
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