From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Michal Kazior <michal.kazior@tieto.com>,
Johannes Berg <johannes.berg@intel.com>
Subject: [PATCH 3.14 26/37] mac80211: fix unnecessary frame drops in mesh fwding
Date: Mon, 18 Apr 2016 11:25:58 +0900 [thread overview]
Message-ID: <20160418022402.125293462@linuxfoundation.org> (raw)
In-Reply-To: <20160418022400.661946311@linuxfoundation.org>
3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michal Kazior <michal.kazior@tieto.com>
commit cf44012810ccdd8fd947518e965cb04b7b8498be upstream.
The ieee80211_queue_stopped() expects hw queue
number but it was given raw WMM AC number instead.
This could cause frame drops and problems with
traffic in some cases - most notably if driver
doesn't map AC numbers to queue numbers 1:1 and
uses ieee80211_stop_queues() and
ieee80211_wake_queue() only without ever calling
ieee80211_wake_queues().
On ath10k it was possible to hit this problem in
the following case:
1. wlan0 uses queue 0
(ath10k maps queues per vif)
2. offchannel uses queue 15
3. queues 1-14 are unused
4. ieee80211_stop_queues()
5. ieee80211_wake_queue(q=0)
6. ieee80211_wake_queue(q=15)
(other queues are not woken up because both
driver and mac80211 know other queues are
unused)
7. ieee80211_rx_h_mesh_fwding()
8. ieee80211_select_queue_80211() returns 2
9. ieee80211_queue_stopped(q=2) returns true
10. frame is dropped (oops!)
Fixes: d3c1597b8d1b ("mac80211: fix forwarded mesh frame queue mapping")
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/mac80211/rx.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -2087,7 +2087,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
struct ieee80211_sub_if_data *sdata = rx->sdata;
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
- u16 q, hdrlen;
+ u16 ac, q, hdrlen;
hdr = (struct ieee80211_hdr *) skb->data;
hdrlen = ieee80211_hdrlen(hdr->frame_control);
@@ -2157,7 +2157,8 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
ether_addr_equal(sdata->vif.addr, hdr->addr3))
return RX_CONTINUE;
- q = ieee80211_select_queue_80211(sdata, skb, hdr);
+ ac = ieee80211_select_queue_80211(sdata, skb, hdr);
+ q = sdata->vif.hw_queue[ac];
if (ieee80211_queue_stopped(&local->hw, q)) {
IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_congestion);
return RX_DROP_MONITOR;
next prev parent reply other threads:[~2016-04-18 2:25 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-18 2:25 [PATCH 3.14 00/37] 3.14.67-stable review Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 01/37] hwmon: (max1111) Return -ENODEV from max1111_read_channel if not instantiated Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 02/37] parisc: Avoid function pointers for kernel exception routines Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 03/37] parisc: Fix kernel crash with reversed copy_from_user() Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 04/37] ALSA: timer: Use mod_timer() for rearming the system timer Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 05/37] mm: fix invalid node in alloc_migrate_target() Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 06/37] drm/radeon: add a dpm quirk for sapphire Dual-X R7 370 2G D5 Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 07/37] drm/radeon: add a dpm quirk for all R7 370 parts Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 08/37] xen/events: Mask a moving irq Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 09/37] net: jme: fix suspend/resume on JMC260 Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 10/37] sctp: lack the check for ports in sctp_v6_cmp_addr Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 11/37] ipv6: re-enable fragment header matching in ipv6_find_hdr Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 13/37] usbnet: cleanup after bind() in probe() Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 14/37] udp6: fix UDP/IPv6 encap resubmit path Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 15/37] sh_eth: fix NULL pointer dereference in sh_eth_ring_format() Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 16/37] net: Fix use after free in the recvmmsg exit path Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 17/37] farsync: fix off-by-one bug in fst_add_one Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 18/37] ath9k: fix buffer overrun for ar9287 Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 19/37] qlge: Fix receive packets drop Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 20/37] ipv4: fix broadcast packets reception Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 21/37] ppp: take reference on channels netns Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 23/37] ipv4: l2tp: fix a potential issue in l2tp_ip_recv Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 24/37] ipv6: l2tp: fix a potential issue in l2tp_ip6_recv Greg Kroah-Hartman
2016-04-18 2:25 ` [PATCH 3.14 25/37] ip6_tunnel: set rtnl_link_ops before calling register_netdevice Greg Kroah-Hartman
2016-04-18 2:25 ` Greg Kroah-Hartman [this message]
2016-04-18 2:25 ` [PATCH 3.14 27/37] usb: renesas_usbhs: avoid NULL pointer derefernce in usbhsf_pkt_handler() Greg Kroah-Hartman
2016-04-18 2:26 ` [PATCH 3.14 28/37] usb: renesas_usbhs: disable TX IRQ before starting TX DMAC transfer Greg Kroah-Hartman
2016-04-18 2:26 ` [PATCH 3.14 29/37] ext4: add lockdep annotations for i_data_sem Greg Kroah-Hartman
2016-04-18 2:26 ` [PATCH 3.14 30/37] perf: Cure event->pending_disable race Greg Kroah-Hartman
2016-04-18 2:26 ` [PATCH 3.14 31/37] HID: usbhid: fix inconsistent reset/resume/reset-resume behavior Greg Kroah-Hartman
2016-04-18 2:26 ` [PATCH 3.14 34/37] [media] usbvision fix overflow of interfaces array Greg Kroah-Hartman
2016-04-18 2:26 ` [PATCH 3.14 35/37] [media] usbvision: fix leak of usb_dev on failure paths in usbvision_probe() Greg Kroah-Hartman
2016-04-18 2:26 ` [PATCH 3.14 36/37] [media] usbvision: fix crash on detecting device with invalid configuration Greg Kroah-Hartman
2016-04-18 2:26 ` [PATCH 3.14 37/37] Revert "usb: hub: do not clear BOS field during reset device" Greg Kroah-Hartman
2016-04-18 16:33 ` [PATCH 3.14 00/37] 3.14.67-stable review Guenter Roeck
2016-04-18 16:33 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160418022402.125293462@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=johannes.berg@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=michal.kazior@tieto.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).