diff options
author | Eric Dumazet <edumazet@google.com> | 2016-11-04 11:54:32 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-11-09 13:02:27 -0500 |
commit | 67db3e4bfbc90657c7be840aad5585be46240d6f (patch) | |
tree | bf67250bf31cf1d0f05a696688efdf26d9033324 /include/linux/tcp.h | |
parent | ccbf3bfaee0e4f1ddf8103884fd4bf9f35f31f08 (diff) | |
download | lwn-67db3e4bfbc90657c7be840aad5585be46240d6f.tar.gz lwn-67db3e4bfbc90657c7be840aad5585be46240d6f.zip |
tcp: no longer hold ehash lock while calling tcp_get_info()
We had various problems in the past in tcp_get_info() and used
specific synchronization to avoid deadlocks.
We would like to add more instrumentation points for TCP, and
avoiding grabing socket lock in tcp_getinfo() was too costly.
Being able to lock the socket allows to provide consistent set
of fields.
inet_diag_dump_icsk() can make sure ehash locks are not
held any more when tcp_get_info() is called.
We can remove syncp added in commit d654976cbf85
("tcp: fix a potential deadlock in tcp_get_info()"), but we need
to use lock_sock_fast() instead of spin_lock_bh() since TCP input
path can now be run from process context.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/tcp.h')
-rw-r--r-- | include/linux/tcp.h | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index a17ae7b85218..32a7c7e35b71 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -176,8 +176,6 @@ struct tcp_sock { * sum(delta(snd_una)), or how many bytes * were acked. */ - struct u64_stats_sync syncp; /* protects 64bit vars (cf tcp_get_info()) */ - u32 snd_una; /* First byte we want an ack for */ u32 snd_sml; /* Last byte of the most recently transmitted small packet */ u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */ |