OSDN Git Service

mac80211: mesh: drop redundant rcu_read_lock/unlock calls
authorFelix Fietkau <nbd@nbd.name>
Sat, 16 Mar 2019 17:06:30 +0000 (18:06 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 26 Apr 2019 11:02:11 +0000 (13:02 +0200)
The callers of these functions are all within RCU locked sections

Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/mesh_hwmp.c
net/mac80211/mesh_pathtbl.c

index c694c0d..2c5929c 100644 (file)
@@ -1130,16 +1130,13 @@ int mesh_nexthop_resolve(struct ieee80211_sub_if_data *sdata,
        struct mesh_path *mpath;
        struct sk_buff *skb_to_free = NULL;
        u8 *target_addr = hdr->addr3;
-       int err = 0;
 
        /* Nulls are only sent to peers for PS and should be pre-addressed */
        if (ieee80211_is_qos_nullfunc(hdr->frame_control))
                return 0;
 
-       rcu_read_lock();
-       err = mesh_nexthop_lookup(sdata, skb);
-       if (!err)
-               goto endlookup;
+       if (!mesh_nexthop_lookup(sdata, skb))
+               return 0;
 
        /* no nexthop found, start resolving */
        mpath = mesh_path_lookup(sdata, target_addr);
@@ -1147,8 +1144,7 @@ int mesh_nexthop_resolve(struct ieee80211_sub_if_data *sdata,
                mpath = mesh_path_add(sdata, target_addr);
                if (IS_ERR(mpath)) {
                        mesh_path_discard_frame(sdata, skb);
-                       err = PTR_ERR(mpath);
-                       goto endlookup;
+                       return PTR_ERR(mpath);
                }
        }
 
@@ -1161,13 +1157,10 @@ int mesh_nexthop_resolve(struct ieee80211_sub_if_data *sdata,
        info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
        ieee80211_set_qos_hdr(sdata, skb);
        skb_queue_tail(&mpath->frame_queue, skb);
-       err = -ENOENT;
        if (skb_to_free)
                mesh_path_discard_frame(sdata, skb_to_free);
 
-endlookup:
-       rcu_read_unlock();
-       return err;
+       return -ENOENT;
 }
 
 /**
@@ -1187,13 +1180,10 @@ int mesh_nexthop_lookup(struct ieee80211_sub_if_data *sdata,
        struct sta_info *next_hop;
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
        u8 *target_addr = hdr->addr3;
-       int err = -ENOENT;
 
-       rcu_read_lock();
        mpath = mesh_path_lookup(sdata, target_addr);
-
        if (!mpath || !(mpath->flags & MESH_PATH_ACTIVE))
-               goto endlookup;
+               return -ENOENT;
 
        if (time_after(jiffies,
                       mpath->exp_time -
@@ -1208,12 +1198,10 @@ int mesh_nexthop_lookup(struct ieee80211_sub_if_data *sdata,
                memcpy(hdr->addr1, next_hop->sta.addr, ETH_ALEN);
                memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN);
                ieee80211_mps_set_frame_flags(sdata, next_hop, hdr);
-               err = 0;
+               return 0;
        }
 
-endlookup:
-       rcu_read_unlock();
-       return err;
+       return -ENOENT;
 }
 
 void mesh_path_timer(struct timer_list *t)
index 95eb506..a805d2a 100644 (file)
@@ -217,7 +217,7 @@ static struct mesh_path *mpath_lookup(struct mesh_table *tbl, const u8 *dst,
 {
        struct mesh_path *mpath;
 
-       mpath = rhashtable_lookup_fast(&tbl->rhead, dst, mesh_rht_params);
+       mpath = rhashtable_lookup(&tbl->rhead, dst, mesh_rht_params);
 
        if (mpath && mpath_expired(mpath)) {
                spin_lock_bh(&mpath->state_lock);