Commit 574be53ab82c3525236c8a3dd70f3dcaebd9e9aa

Authored by Bob Copeland
Committed by Greg Kroah-Hartman
1 parent d46c334f07

mac80211: fix pending queue hang due to TX_DROP

[ Upstream commit 6eae4a6c2be387fec41b0d2782c4fffb57159498 ]

In our environment running lots of mesh nodes, we are seeing the
pending queue hang periodically, with the debugfs queues file showing
lines such as:

    00: 0x00000000/348

i.e. there are a large number of frames but no stop reason set.

One way this could happen is if queue processing from the pending
tasklet exited early without processing all frames, and without having
some future event (incoming frame, stop reason flag, ...) to reschedule
it.

Exactly this can occur today if ieee80211_tx() returns false due to
packet drops or power-save buffering in the tx handlers.  In the
past, this function would return true in such cases, and the change
to false doesn't seem to be intentional.  Fix this case by reverting
to the previous behavior.

Fixes: bb42f2d13ffc ("mac80211: Move reorder-sensitive TX handlers to after TXQ dequeue")
Signed-off-by: Bob Copeland <bobcopeland@fb.com>
Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>

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

... ... @@ -1837,7 +1837,7 @@
1837 1837 sdata->vif.hw_queue[skb_get_queue_mapping(skb)];
1838 1838  
1839 1839 if (invoke_tx_handlers_early(&tx))
1840   - return false;
  1840 + return true;
1841 1841  
1842 1842 if (ieee80211_queue_skb(local, sdata, tx.sta, tx.skb))
1843 1843 return true;