From: Arnd Bergmann > Sent: 28 July 2017 15:42 ... > --- a/net/ipv4/tcp_output.c > +++ b/net/ipv4/tcp_output.c > @@ -2202,9 +2202,10 @@ static bool tcp_small_queue_check(struct sock *sk, > const struct sk_buff *skb, > static void tcp_chrono_set(struct tcp_sock *tp, const enum tcp_chrono new) > { > const u32 now = tcp_jiffies32; > + enum tcp_chrono old = tp->chrono_type; > > - if (tp->chrono_type > TCP_CHRONO_UNSPEC) > - tp->chrono_stat[tp->chrono_type - 1] += now - tp->chrono_start; > + if (old > TCP_CHRONO_UNSPEC) > + tp->chrono_stat[old - 1] += now - tp->chrono_start; > tp->chrono_start = now; > tp->chrono_type = new;
What a horrid combination of enum and integers. Also have u32 chrono_stat[3]; - should probably be [__TCP_CHRONO_MAX - 1] (or - CHRONO_FIRST which is defined to be 1). Checking if (old != 0) would make the code more readable. David