Commit 14042cbefce4af12f7ca35d2604686154d803291

Authored by Mattias Nissler
Committed by John W. Linville
1 parent 0107136c04

[PATCH] mac80211: Don't stop tx queue on master device while scanning.

mac80211 stops the tx queues during scans. This is wrong with respect
to the master deivce tx queue, since stopping it prevents any probes
from being sent during the scan. Instead, they accumulate in the queue
and are only sent after the scan is finished, which is obviously
wrong.

Signed-off-by: Mattias Nissler <mattias.nissler@gmx.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

Showing 1 changed file with 12 additions and 0 deletions Side-by-side Diff

net/mac80211/ieee80211_sta.c
... ... @@ -2592,11 +2592,17 @@
2592 2592  
2593 2593 read_lock(&local->sub_if_lock);
2594 2594 list_for_each_entry(sdata, &local->sub_if_list, list) {
  2595 +
  2596 + /* No need to wake the master device. */
  2597 + if (sdata->dev == local->mdev)
  2598 + continue;
  2599 +
2595 2600 if (sdata->type == IEEE80211_IF_TYPE_STA) {
2596 2601 if (sdata->u.sta.associated)
2597 2602 ieee80211_send_nullfunc(local, sdata, 0);
2598 2603 ieee80211_sta_timer((unsigned long)sdata);
2599 2604 }
  2605 +
2600 2606 netif_wake_queue(sdata->dev);
2601 2607 }
2602 2608 read_unlock(&local->sub_if_lock);
... ... @@ -2738,6 +2744,12 @@
2738 2744  
2739 2745 read_lock(&local->sub_if_lock);
2740 2746 list_for_each_entry(sdata, &local->sub_if_list, list) {
  2747 +
  2748 + /* Don't stop the master interface, otherwise we can't transmit
  2749 + * probes! */
  2750 + if (sdata->dev == local->mdev)
  2751 + continue;
  2752 +
2741 2753 netif_stop_queue(sdata->dev);
2742 2754 if (sdata->type == IEEE80211_IF_TYPE_STA &&
2743 2755 sdata->u.sta.associated)