The removed patches are now integrated in the upstream kernel. Refresh all patches on top of the new backports release. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Tested-by: Daniel Engberg <daniel.engberg.lists@pyret.net>
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
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
 | 
						|
@@ -1112,16 +1112,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);
 | 
						|
@@ -1129,8 +1126,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);
 | 
						|
 		}
 | 
						|
 	}
 | 
						|
 
 | 
						|
@@ -1143,13 +1139,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;
 | 
						|
 }
 | 
						|
 
 | 
						|
 /**
 | 
						|
@@ -1169,13 +1162,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 -
 | 
						|
@@ -1190,12 +1180,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);
 |