diff mbox

mac80211: fix ieee80211_sta_tx_notify for nullfunc

Message ID 1360847317-31387-1-git-send-email-Wojciech.Dubowik@neratec.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Wojciech Dubowik Feb. 14, 2013, 1:08 p.m. UTC
Function ieee80211_sta_reset_conn_monitor has been
resetting probe_send_count too early and nullfunc
check was never called after succesfull ack.

Reported-by: Magnus Cederlöf <mcider@gmail.com>
Signed-off-by: Wojciech Dubowik <Wojciech.Dubowik@neratec.com>
---
 net/mac80211/mlme.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

Comments

Magnus Cederlöf Feb. 14, 2013, 2:16 p.m. UTC | #1
> Function ieee80211_sta_reset_conn_monitor has been
> resetting probe_send_count too early and nullfunc
> check was never called after succesfull ack.

I can confirm that the patch fixes the power save problem I had.

Thanks,
Magnus
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johannes Berg Feb. 14, 2013, 3:43 p.m. UTC | #2
On Thu, 2013-02-14 at 14:08 +0100, Wojciech Dubowik wrote:
> Function ieee80211_sta_reset_conn_monitor has been
> resetting probe_send_count too early and nullfunc
> check was never called after succesfull ack.
> 
> Reported-by: Magnus Cederlöf <mcider@gmail.com>
> Signed-off-by: Wojciech Dubowik <Wojciech.Dubowik@neratec.com>

Applied, thanks!

johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index cafefb2..a7fb276 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1637,17 +1637,18 @@  void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata,
 	if (!ieee80211_is_data(hdr->frame_control))
 	    return;
 
-	if (ack)
-		ieee80211_sta_reset_conn_monitor(sdata);
-
 	if (ieee80211_is_nullfunc(hdr->frame_control) &&
 	    sdata->u.mgd.probe_send_count > 0) {
 		if (ack)
-			sdata->u.mgd.probe_send_count = 0;
+			ieee80211_sta_reset_conn_monitor(sdata);
 		else
 			sdata->u.mgd.nullfunc_failed = true;
 		ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+		return;
 	}
+
+	if (ack)
+		ieee80211_sta_reset_conn_monitor(sdata);
 }
 
 static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata)