Message ID | 1489704199.28631.262.camel@edumazet-glaptop3.roam.corp.google.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Thu, 16 Mar 2017 15:43:19 -0700 > From: Eric Dumazet <edumazet@google.com> > > Commit b369e7fd41f7 ("tcp: make TCP_INFO more consistent") moved > lock_sock_fast() earlier in tcp_get_info() > > This has the minor effect that jiffies value being sampled at the > beginning of tcp_get_info() is more likely to be off by one, and we > report big tcpi_last_data_sent values (like 0xFFFFFFFF). > > Since we lock the socket, fetching tcp_time_stamp right before > doing the jiffies_to_msecs() calls is enough to remove these > wrong values. > > Signed-off-by: Eric Dumazet <edumazet@google.com> Applied, thanks Eric.
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index cf4555581282c608f920254078264e36e18584c6..1e319a525d51b0b603a5ccc5143381c752b9f2c7 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2770,7 +2770,7 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) { const struct tcp_sock *tp = tcp_sk(sk); /* iff sk_type == SOCK_STREAM */ const struct inet_connection_sock *icsk = inet_csk(sk); - u32 now = tcp_time_stamp, intv; + u32 now, intv; u64 rate64; bool slow; u32 rate; @@ -2839,6 +2839,7 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) info->tcpi_retrans = tp->retrans_out; info->tcpi_fackets = tp->fackets_out; + now = tcp_time_stamp; info->tcpi_last_data_sent = jiffies_to_msecs(now - tp->lsndtime); info->tcpi_last_data_recv = jiffies_to_msecs(now - icsk->icsk_ack.lrcvtime); info->tcpi_last_ack_recv = jiffies_to_msecs(now - tp->rcv_tstamp);