]> Git Repo - linux.git/commit
tcp: no longer hold ehash lock while calling tcp_get_info()
authorEric Dumazet <[email protected]>
Fri, 4 Nov 2016 18:54:32 +0000 (11:54 -0700)
committerDavid S. Miller <[email protected]>
Wed, 9 Nov 2016 18:02:27 +0000 (13:02 -0500)
commit67db3e4bfbc90657c7be840aad5585be46240d6f
treebf67250bf31cf1d0f05a696688efdf26d9033324
parentccbf3bfaee0e4f1ddf8103884fd4bf9f35f31f08
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 <[email protected]>
Signed-off-by: Yuchung Cheng <[email protected]>
Acked-by: Soheil Hassas Yeganeh <[email protected]>
Acked-by: Neal Cardwell <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
include/linux/tcp.h
net/ipv4/inet_diag.c
net/ipv4/tcp.c
net/ipv4/tcp_input.c
This page took 0.05737 seconds and 4 git commands to generate.