diff options
author | Eric Dumazet <edumazet@google.com> | 2017-12-12 08:25:12 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-12-13 22:33:10 +0300 |
commit | ec94c2696f0bcd5ae92a553244e4ac30d2171a2d (patch) | |
tree | 1a9eebba8042da0292f583f778abbe72974cc2a2 /net/ipv4/tcp_minisocks.c | |
parent | 1e7570117575360504e632d0c31d6b52d3d7ea9c (diff) | |
download | linux-ec94c2696f0bcd5ae92a553244e4ac30d2171a2d.tar.xz |
tcp/dccp: avoid one atomic operation for timewait hashdance
First, rename __inet_twsk_hashdance() to inet_twsk_hashdance()
Then, remove one inet_twsk_put() by setting tw_refcnt to 3 instead
of 4, but adding a fat warning that we do not have the right to access
tw anymore after inet_twsk_hashdance()
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_minisocks.c')
-rw-r--r-- | net/ipv4/tcp_minisocks.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index b079b619b60c..a8384b0c11f8 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c @@ -316,9 +316,10 @@ void tcp_time_wait(struct sock *sk, int state, int timeo) */ local_bh_disable(); inet_twsk_schedule(tw, timeo); - /* Linkage updates. */ - __inet_twsk_hashdance(tw, sk, &tcp_hashinfo); - inet_twsk_put(tw); + /* Linkage updates. + * Note that access to tw after this point is illegal. + */ + inet_twsk_hashdance(tw, sk, &tcp_hashinfo); local_bh_enable(); } else { /* Sorry, if we're out of memory, just CLOSE this |