For these places are protected by rcu_read_lock, we change from
rcu_dereference_rtnl to rcu_dereference, as there is no need to
check if rtnl lock is held.

For these places are protected by rtnl_lock, we change from
rcu_dereference_rtnl to rtnl_dereference/rcu_dereference_protected,
as no extra memory barriers are needed under rtnl_lock() which also
protects tn->bearer_list[] and dev->tipc_ptr/b->media_ptr updating.

rcu_dereference_rtnl will be only used in the places where it could
be under rcu_read_lock or rtnl_lock.

Signed-off-by: Xin Long <lucien....@gmail.com>
---
 net/tipc/bearer.c    | 14 +++++++-------
 net/tipc/udp_media.c |  8 ++++----
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index 2bed658..a809c0e 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -62,7 +62,7 @@ static struct tipc_bearer *bearer_get(struct net *net, int 
bearer_id)
 {
        struct tipc_net *tn = tipc_net(net);
 
-       return rcu_dereference_rtnl(tn->bearer_list[bearer_id]);
+       return rcu_dereference(tn->bearer_list[bearer_id]);
 }
 
 static void bearer_disable(struct net *net, struct tipc_bearer *b);
@@ -210,7 +210,7 @@ void tipc_bearer_add_dest(struct net *net, u32 bearer_id, 
u32 dest)
        struct tipc_bearer *b;
 
        rcu_read_lock();
-       b = rcu_dereference_rtnl(tn->bearer_list[bearer_id]);
+       b = rcu_dereference(tn->bearer_list[bearer_id]);
        if (b)
                tipc_disc_add_dest(b->disc);
        rcu_read_unlock();
@@ -222,7 +222,7 @@ void tipc_bearer_remove_dest(struct net *net, u32 
bearer_id, u32 dest)
        struct tipc_bearer *b;
 
        rcu_read_lock();
-       b = rcu_dereference_rtnl(tn->bearer_list[bearer_id]);
+       b = rcu_dereference(tn->bearer_list[bearer_id]);
        if (b)
                tipc_disc_remove_dest(b->disc);
        rcu_read_unlock();
@@ -444,7 +444,7 @@ int tipc_l2_send_msg(struct net *net, struct sk_buff *skb,
        struct net_device *dev;
        int delta;
 
-       dev = (struct net_device *)rcu_dereference_rtnl(b->media_ptr);
+       dev = (struct net_device *)rcu_dereference(b->media_ptr);
        if (!dev)
                return 0;
 
@@ -481,7 +481,7 @@ int tipc_bearer_mtu(struct net *net, u32 bearer_id)
        struct tipc_bearer *b;
 
        rcu_read_lock();
-       b = rcu_dereference_rtnl(tipc_net(net)->bearer_list[bearer_id]);
+       b = rcu_dereference(tipc_net(net)->bearer_list[bearer_id]);
        if (b)
                mtu = b->mtu;
        rcu_read_unlock();
@@ -574,8 +574,8 @@ static int tipc_l2_rcv_msg(struct sk_buff *skb, struct 
net_device *dev,
        struct tipc_bearer *b;
 
        rcu_read_lock();
-       b = rcu_dereference_rtnl(dev->tipc_ptr) ?:
-               rcu_dereference_rtnl(orig_dev->tipc_ptr);
+       b = rcu_dereference(dev->tipc_ptr) ?:
+               rcu_dereference(orig_dev->tipc_ptr);
        if (likely(b && test_bit(0, &b->up) &&
                   (skb->pkt_type <= PACKET_MULTICAST))) {
                skb_mark_not_on_list(skb);
diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c
index b8962df..62b85db 100644
--- a/net/tipc/udp_media.c
+++ b/net/tipc/udp_media.c
@@ -231,7 +231,7 @@ static int tipc_udp_send_msg(struct net *net, struct 
sk_buff *skb,
        }
 
        skb_set_inner_protocol(skb, htons(ETH_P_TIPC));
-       ub = rcu_dereference_rtnl(b->media_ptr);
+       ub = rcu_dereference(b->media_ptr);
        if (!ub) {
                err = -ENODEV;
                goto out;
@@ -490,7 +490,7 @@ int tipc_udp_nl_dump_remoteip(struct sk_buff *skb, struct 
netlink_callback *cb)
                }
        }
 
-       ub = rcu_dereference_rtnl(b->media_ptr);
+       ub = rtnl_dereference(b->media_ptr);
        if (!ub) {
                rtnl_unlock();
                return -EINVAL;
@@ -532,7 +532,7 @@ int tipc_udp_nl_add_bearer_data(struct tipc_nl_msg *msg, 
struct tipc_bearer *b)
        struct udp_bearer *ub;
        struct nlattr *nest;
 
-       ub = rcu_dereference_rtnl(b->media_ptr);
+       ub = rtnl_dereference(b->media_ptr);
        if (!ub)
                return -ENODEV;
 
@@ -806,7 +806,7 @@ static void tipc_udp_disable(struct tipc_bearer *b)
 {
        struct udp_bearer *ub;
 
-       ub = rcu_dereference_rtnl(b->media_ptr);
+       ub = rtnl_dereference(b->media_ptr);
        if (!ub) {
                pr_err("UDP bearer instance not found\n");
                return;
-- 
2.1.0

Reply via email to