diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-07-24 07:23:09 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-07-27 15:24:19 -0400 |
commit | 3fa52056f3a8e755708241d5795e6d3e6f55ad85 (patch) | |
tree | 17986e56e775dc55627e4ba9aa0639182ee34339 /drivers/net/wireless/p54/txrx.c | |
parent | 91a3bd76155085d41520cf41ede39e8b7f01aeff (diff) |
mac80211: fix PS-poll response, race
When a station queries us for a PS-poll response, we wrongly
queue the frame on the virtual interface's queue rather than
the pending queue.
Additionally, fix a race condition where we could potentially
send multiple frames to the sleeping station due to using a
station flag rather than a packet flag. When converting to a
packet flag, we can also convert p54 and remove the filter
clearing we added for it.
(Also remove a now dead function)
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reported-by: Bob Copeland <me@bobcopeland.com>
Tested-by: Bob Copeland <me@bobcopeland.com>
Cc: Christian Lamparter <chunkeey@web.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/p54/txrx.c')
-rw-r--r-- | drivers/net/wireless/p54/txrx.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c index 0d589d68e547..c32a0d2fa1f7 100644 --- a/drivers/net/wireless/p54/txrx.c +++ b/drivers/net/wireless/p54/txrx.c | |||
@@ -614,7 +614,7 @@ static void p54_tx_80211_header(struct p54_common *priv, struct sk_buff *skb, | |||
614 | if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) | 614 | if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) |
615 | *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; | 615 | *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; |
616 | 616 | ||
617 | if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT) | 617 | if (info->flags & IEEE80211_TX_CTL_PSPOLL_RESPONSE) |
618 | *flags |= P54_HDR_FLAG_DATA_OUT_NOCANCEL; | 618 | *flags |= P54_HDR_FLAG_DATA_OUT_NOCANCEL; |
619 | 619 | ||
620 | *queue = skb_get_queue_mapping(skb) + P54_QUEUE_DATA; | 620 | *queue = skb_get_queue_mapping(skb) + P54_QUEUE_DATA; |