projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] mac80211: fix virtual interface locking
[deliverable/linux.git]
/
net
/
mac80211
/
tx.c
diff --git
a/net/mac80211/tx.c
b/net/mac80211/tx.c
index 38394c40f6ad3930deae4b22db6aa0f88a780f2d..244c80d0c8fb46d3302ab0646d25c6b6ca3c5147 100644
(file)
--- a/
net/mac80211/tx.c
+++ b/
net/mac80211/tx.c
@@
-295,8
+295,12
@@
static void purge_old_ps_buffers(struct ieee80211_local *local)
struct ieee80211_sub_if_data *sdata;
struct sta_info *sta;
struct ieee80211_sub_if_data *sdata;
struct sta_info *sta;
- read_lock(&local->sub_if_lock);
- list_for_each_entry(sdata, &local->sub_if_list, list) {
+ /*
+ * virtual interfaces are protected by RCU
+ */
+ rcu_read_lock();
+
+ list_for_each_entry_rcu(sdata, &local->interfaces, list) {
struct ieee80211_if_ap *ap;
if (sdata->dev == local->mdev ||
sdata->type != IEEE80211_IF_TYPE_AP)
struct ieee80211_if_ap *ap;
if (sdata->dev == local->mdev ||
sdata->type != IEEE80211_IF_TYPE_AP)
@@
-309,7
+313,7
@@
static void purge_old_ps_buffers(struct ieee80211_local *local)
}
total += skb_queue_len(&ap->ps_bc_buf);
}
}
total += skb_queue_len(&ap->ps_bc_buf);
}
- r
ead_unlock(&local->sub_if_lock
);
+ r
cu_read_unlock(
);
read_lock_bh(&local->sta_lock);
list_for_each_entry(sta, &local->sta_list, list) {
read_lock_bh(&local->sta_lock);
list_for_each_entry(sta, &local->sta_list, list) {
This page took
0.023866 seconds
and
5
git commands to generate.