diff options
author | David S. Miller <davem@davemloft.net> | 2009-10-08 18:55:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-10-08 18:55:21 -0400 |
commit | 67972e0c238fa802580b5919f11e1de3da5179da (patch) | |
tree | 27022c957154a9d36fc8aa0f020bed523e7849b3 /net | |
parent | ad61df918c44316940404891d5082c63e79c256a (diff) | |
parent | 8a8e05e5d8f6155788761961fc9845328863c16d (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/rx.c | 10 | ||||
-rw-r--r-- | net/mac80211/sta_info.c | 2 | ||||
-rw-r--r-- | net/mac80211/tx.c | 3 | ||||
-rw-r--r-- | net/mac80211/util.c | 4 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 3 |
5 files changed, 16 insertions, 6 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index c01588f9d453..865fbc09be1a 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -2164,11 +2164,17 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, | |||
2164 | 2164 | ||
2165 | skb = rx.skb; | 2165 | skb = rx.skb; |
2166 | 2166 | ||
2167 | list_for_each_entry_rcu(sdata, &local->interfaces, list) { | 2167 | if (rx.sdata && ieee80211_is_data(hdr->frame_control)) { |
2168 | rx.flags |= IEEE80211_RX_RA_MATCH; | ||
2169 | prepares = prepare_for_handlers(rx.sdata, &rx, hdr); | ||
2170 | if (prepares) | ||
2171 | prev = rx.sdata; | ||
2172 | } else list_for_each_entry_rcu(sdata, &local->interfaces, list) { | ||
2168 | if (!netif_running(sdata->dev)) | 2173 | if (!netif_running(sdata->dev)) |
2169 | continue; | 2174 | continue; |
2170 | 2175 | ||
2171 | if (sdata->vif.type == NL80211_IFTYPE_MONITOR) | 2176 | if (sdata->vif.type == NL80211_IFTYPE_MONITOR || |
2177 | sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||
2172 | continue; | 2178 | continue; |
2173 | 2179 | ||
2174 | rx.flags |= IEEE80211_RX_RA_MATCH; | 2180 | rx.flags |= IEEE80211_RX_RA_MATCH; |
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index eec001491e66..594f2318c3d8 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
@@ -361,6 +361,7 @@ int sta_info_insert(struct sta_info *sta) | |||
361 | u.ap); | 361 | u.ap); |
362 | 362 | ||
363 | drv_sta_notify(local, &sdata->vif, STA_NOTIFY_ADD, &sta->sta); | 363 | drv_sta_notify(local, &sdata->vif, STA_NOTIFY_ADD, &sta->sta); |
364 | sdata = sta->sdata; | ||
364 | } | 365 | } |
365 | 366 | ||
366 | #ifdef CONFIG_MAC80211_VERBOSE_DEBUG | 367 | #ifdef CONFIG_MAC80211_VERBOSE_DEBUG |
@@ -496,6 +497,7 @@ static void __sta_info_unlink(struct sta_info **sta) | |||
496 | 497 | ||
497 | drv_sta_notify(local, &sdata->vif, STA_NOTIFY_REMOVE, | 498 | drv_sta_notify(local, &sdata->vif, STA_NOTIFY_REMOVE, |
498 | &(*sta)->sta); | 499 | &(*sta)->sta); |
500 | sdata = (*sta)->sdata; | ||
499 | } | 501 | } |
500 | 502 | ||
501 | if (ieee80211_vif_is_mesh(&sdata->vif)) { | 503 | if (ieee80211_vif_is_mesh(&sdata->vif)) { |
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index fd4028296613..db4bda681ec9 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -1704,7 +1704,8 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, | |||
1704 | if (!is_multicast_ether_addr(hdr.addr1)) { | 1704 | if (!is_multicast_ether_addr(hdr.addr1)) { |
1705 | rcu_read_lock(); | 1705 | rcu_read_lock(); |
1706 | sta = sta_info_get(local, hdr.addr1); | 1706 | sta = sta_info_get(local, hdr.addr1); |
1707 | if (sta) | 1707 | /* XXX: in the future, use sdata to look up the sta */ |
1708 | if (sta && sta->sdata == sdata) | ||
1708 | sta_flags = get_sta_flags(sta); | 1709 | sta_flags = get_sta_flags(sta); |
1709 | rcu_read_unlock(); | 1710 | rcu_read_unlock(); |
1710 | } | 1711 | } |
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index dd6564321369..aeb65b3d2295 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -339,7 +339,7 @@ void ieee80211_add_pending_skb(struct ieee80211_local *local, | |||
339 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 339 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
340 | 340 | ||
341 | if (WARN_ON(!info->control.vif)) { | 341 | if (WARN_ON(!info->control.vif)) { |
342 | kfree(skb); | 342 | kfree_skb(skb); |
343 | return; | 343 | return; |
344 | } | 344 | } |
345 | 345 | ||
@@ -367,7 +367,7 @@ int ieee80211_add_pending_skbs(struct ieee80211_local *local, | |||
367 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 367 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
368 | 368 | ||
369 | if (WARN_ON(!info->control.vif)) { | 369 | if (WARN_ON(!info->control.vif)) { |
370 | kfree(skb); | 370 | kfree_skb(skb); |
371 | continue; | 371 | continue; |
372 | } | 372 | } |
373 | 373 | ||
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index eddab097435c..ca3c92a0a14f 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -4029,7 +4029,7 @@ static int nl80211_wiphy_netns(struct sk_buff *skb, struct genl_info *info) | |||
4029 | rdev = cfg80211_get_dev_from_info(info); | 4029 | rdev = cfg80211_get_dev_from_info(info); |
4030 | if (IS_ERR(rdev)) { | 4030 | if (IS_ERR(rdev)) { |
4031 | err = PTR_ERR(rdev); | 4031 | err = PTR_ERR(rdev); |
4032 | goto out; | 4032 | goto out_rtnl; |
4033 | } | 4033 | } |
4034 | 4034 | ||
4035 | net = get_net_ns_by_pid(pid); | 4035 | net = get_net_ns_by_pid(pid); |
@@ -4049,6 +4049,7 @@ static int nl80211_wiphy_netns(struct sk_buff *skb, struct genl_info *info) | |||
4049 | put_net(net); | 4049 | put_net(net); |
4050 | out: | 4050 | out: |
4051 | cfg80211_unlock_rdev(rdev); | 4051 | cfg80211_unlock_rdev(rdev); |
4052 | out_rtnl: | ||
4052 | rtnl_unlock(); | 4053 | rtnl_unlock(); |
4053 | return err; | 4054 | return err; |
4054 | } | 4055 | } |