diff mbox series

[v2] mac80211: fix insane values that sometimes appear in inactive_time

Message ID 20191031121243.27694-1-anzaki@gmail.com (mailing list archive)
State Accepted
Delegated to: Johannes Berg
Headers show
Series [v2] mac80211: fix insane values that sometimes appear in inactive_time | expand

Commit Message

Ahmed Zaki Oct. 31, 2019, 12:12 p.m. UTC
In the first 5 minutes after boot (time of INITIAL_JIFFIES),
ieee80211_sta_last_active() returns zero if last_ack is zero. This
leads to "inactive time" showing jiffies_to_msecs(jiffies).

 # iw wlan0 station get fc:ec:da:64:a6:dd
 Station fc:ec:da:64:a6:dd (on wlan0)
	inactive time:	4294894049 ms
	.
	.
	connected time:	70 seconds

Fix by returning last_rx if last_ack == 0.

Signed-off-by: Ahmed Zaki <anzaki@gmail.com>
---
 net/mac80211/sta_info.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Johannes Berg Oct. 31, 2019, 12:23 p.m. UTC | #1
On Thu, 2019-10-31 at 06:12 -0600, Ahmed Zaki wrote:
> In the first 5 minutes after boot (time of INITIAL_JIFFIES),
> ieee80211_sta_last_active() returns zero if last_ack is zero. This
> leads to "inactive time" showing jiffies_to_msecs(jiffies).
> 
>  # iw wlan0 station get fc:ec:da:64:a6:dd
>  Station fc:ec:da:64:a6:dd (on wlan0)
> 	inactive time:	4294894049 ms
> 	.
> 	.
> 	connected time:	70 seconds
> 
> Fix by returning last_rx if last_ack == 0.
> 
> Signed-off-by: Ahmed Zaki <anzaki@gmail.com>

Thanks for the updates :)
 
> -	if (time_after(stats->last_rx, sta->status_stats.last_ack))
> +	if (!sta->status_stats.last_ack ||
> +		time_after(stats->last_rx, sta->status_stats.last_ack))
>  		return stats->last_rx;

The indentation is still wrong :)

I guess I could fix that too.

johannes
diff mbox series

Patch

diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index bd11fef2139f..428866ff7c0a 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -2457,7 +2457,8 @@  unsigned long ieee80211_sta_last_active(struct sta_info *sta)
 {
 	struct ieee80211_sta_rx_stats *stats = sta_get_last_rx_stats(sta);
 
-	if (time_after(stats->last_rx, sta->status_stats.last_ack))
+	if (!sta->status_stats.last_ack ||
+		time_after(stats->last_rx, sta->status_stats.last_ack))
 		return stats->last_rx;
 	return sta->status_stats.last_ack;
 }