ソースを参照

mac80211: fix IBSS code to not sleep while atomic

With the RCU locking here we sleep while in an atomic context,
since we can sleep just use mutex locking for the interface
list instead of RCU. Sorry, seems I didn't get that in my UML
test.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Johannes Berg 16 年 前
コミット
29b4a4f7c7
1 ファイル変更3 行追加3 行削除
  1. 3 3
      net/mac80211/ibss.c

+ 3 - 3
net/mac80211/ibss.c

@@ -784,14 +784,14 @@ void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local)
 {
 {
 	struct ieee80211_sub_if_data *sdata;
 	struct ieee80211_sub_if_data *sdata;
 
 
-	rcu_read_lock();
-	list_for_each_entry_rcu(sdata, &local->interfaces, list) {
+	mutex_lock(&local->iflist_mtx);
+	list_for_each_entry(sdata, &local->interfaces, list) {
 		if (sdata->vif.type != NL80211_IFTYPE_ADHOC)
 		if (sdata->vif.type != NL80211_IFTYPE_ADHOC)
 			continue;
 			continue;
 		sdata->u.ibss.last_scan_completed = jiffies;
 		sdata->u.ibss.last_scan_completed = jiffies;
 		ieee80211_sta_find_ibss(sdata);
 		ieee80211_sta_find_ibss(sdata);
 	}
 	}
-	rcu_read_unlock();
+	mutex_unlock(&local->iflist_mtx);
 }
 }
 
 
 ieee80211_rx_result
 ieee80211_rx_result