123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- From: Felix Fietkau <nbd@nbd.name>
- Date: Sat, 16 Mar 2019 17:43:58 +0100
- Subject: [PATCH] mac80211: mesh: drop redundant rcu_read_lock/unlock calls
- The callers of these functions are all within RCU locked sections
- Signed-off-by: Felix Fietkau <nbd@nbd.name>
- ---
- --- a/net/mac80211/mesh_hwmp.c
- +++ b/net/mac80211/mesh_hwmp.c
- @@ -1115,16 +1115,13 @@ int mesh_nexthop_resolve(struct ieee8021
- 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);
- @@ -1132,8 +1129,7 @@ int mesh_nexthop_resolve(struct ieee8021
- 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);
- }
- }
-
- @@ -1147,13 +1143,10 @@ int mesh_nexthop_resolve(struct ieee8021
- 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;
- }
-
- /**
- @@ -1173,13 +1166,10 @@ int mesh_nexthop_lookup(struct ieee80211
- 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 -
- @@ -1194,12 +1184,10 @@ int mesh_nexthop_lookup(struct ieee80211
- 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)
- --- a/net/mac80211/mesh_pathtbl.c
- +++ b/net/mac80211/mesh_pathtbl.c
- @@ -219,7 +219,7 @@ static struct mesh_path *mpath_lookup(st
- {
- 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);
|