diff mbox series

[2/4] net: mac80211: scan.c: Fix RCU list related warnings.

Message ID 20200409082849.27372-1-madhuparnabhowmik10@gmail.com
State Awaiting Upstream
Delegated to: David Miller
Headers show
Series [1/4] net: mac80211: util.c: Fix RCU list usage warnings | expand

Commit Message

Madhuparna Bhowmik April 9, 2020, 8:28 a.m. UTC
From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>

This patch fixes the following warning:

WARNING: suspicious RCU usage
[   84.530619] 5.6.0+ #4 Not tainted
[   84.530637] -----------------------------
[   84.530658] net/mac80211/scan.c:454 RCU-list traversed in non-reader section!!

As local->mtx is held in __ieee80211_scan_completed(), no need to use
list_for_each_entry_rcu() (use list_for_each_entry() instead.).

Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
---
 net/mac80211/scan.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Johannes Berg April 24, 2020, 9:21 a.m. UTC | #1
On Thu, 2020-04-09 at 13:58 +0530, madhuparnabhowmik10@gmail.com wrote:
> From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
> 
> This patch fixes the following warning:
> 
> WARNING: suspicious RCU usage
> [   84.530619] 5.6.0+ #4 Not tainted
> [   84.530637] -----------------------------
> [   84.530658] net/mac80211/scan.c:454 RCU-list traversed in non-reader section!!
> 
> As local->mtx is held in __ieee80211_scan_completed()

Yeah, but is that really the right lock? I think it should be RTNL or
iflist_mtx for the interface list.

(Not that this is necessarily a good idea - we perhaps should clean up
and significantly reduce the number of locks used here.)

johannes
diff mbox series

Patch

diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index fdac8192a519..0860f028ab2a 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -451,7 +451,7 @@  static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
 	 * the scan was in progress; if there was none this will
 	 * just be a no-op for the particular interface.
 	 */
-	list_for_each_entry_rcu(sdata, &local->interfaces, list) {
+	list_for_each_entry(sdata, &local->interfaces, list) {
 		if (ieee80211_sdata_running(sdata))
 			ieee80211_queue_work(&sdata->local->hw, &sdata->work);
 	}