mac80211: update sta connection monitor regression fix
Reset the connection monitor on all acked frames Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
		| @@ -2,25 +2,37 @@ From: Felix Fietkau <nbd@nbd.name> | |||||||
| Date: Mon, 21 Sep 2020 17:43:06 +0200 | Date: Mon, 21 Sep 2020 17:43:06 +0200 | ||||||
| Subject: [PATCH] mac80211: fix regression in sta connection monitor | Subject: [PATCH] mac80211: fix regression in sta connection monitor | ||||||
|  |  | ||||||
| When the nulldata frame was acked, the probe send count needs to be reset, | When a frame was acked and probe frames were sent, the connection monitoring | ||||||
| otherwise it will keep increasing until the connection is considered dead, | needs to be reset, otherwise it will keep probing until the connection is | ||||||
| even though it fine. | considered dead, even though frames have been acked in the mean time. | ||||||
|  |  | ||||||
| Fixes: 9abf4e49830d ("mac80211: optimize station connection monitor") | Fixes: 9abf4e49830d ("mac80211: optimize station connection monitor") | ||||||
| Reported-by: Georgi Valkov <gvalkov@abv.bg> | Reported-by: Georgi Valkov <gvalkov@abv.bg> | ||||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> | Signed-off-by: Felix Fietkau <nbd@nbd.name> | ||||||
| --- | --- | ||||||
|  |  | ||||||
| --- a/net/mac80211/mlme.c | --- a/net/mac80211/status.c | ||||||
| +++ b/net/mac80211/mlme.c | +++ b/net/mac80211/status.c | ||||||
| @@ -2508,7 +2508,9 @@ void ieee80211_sta_tx_notify(struct ieee | @@ -1129,6 +1129,8 @@ void ieee80211_tx_status_ext(struct ieee | ||||||
|  	    !sdata->u.mgd.probe_send_count) |  	noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED); | ||||||
|  		return; |  | ||||||
|   |   | ||||||
| -	if (!ack) |  	if (pubsta) { | ||||||
| +	if (ack) | +		struct ieee80211_sub_if_data *sdata = sta->sdata; | ||||||
| +		sdata->u.mgd.probe_send_count = 0; | + | ||||||
| +	else |  		if (!acked && !noack_success) | ||||||
|  		sdata->u.mgd.nullfunc_failed = true; |  			sta->status_stats.retry_failed++; | ||||||
|  	ieee80211_queue_work(&sdata->local->hw, &sdata->work); |  		sta->status_stats.retry_count += retry_count; | ||||||
|  } | @@ -1143,6 +1145,13 @@ void ieee80211_tx_status_ext(struct ieee | ||||||
|  |  				/* Track when last packet was ACKed */ | ||||||
|  |  				sta->status_stats.last_pkt_time = jiffies; | ||||||
|  |   | ||||||
|  | +				/* Reset connection monitor */ | ||||||
|  | +				if (sdata->vif.type == NL80211_IFTYPE_STATION && | ||||||
|  | +				    unlikely(sdata->u.mgd.probe_send_count > 0)) { | ||||||
|  | +					sdata->u.mgd.probe_send_count = 0; | ||||||
|  | +					ieee80211_queue_work(&local->hw, &sdata->work); | ||||||
|  | +				} | ||||||
|  | + | ||||||
|  |  				if (info->status.is_valid_ack_signal) { | ||||||
|  |  					sta->status_stats.last_ack_signal = | ||||||
|  |  							 (s8)info->status.ack_signal; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau