]> git.baikalelectronics.ru Git - kernel.git/commit
tcp: remove poll() flakes when receiving RST
authorEric Dumazet <edumazet@google.com>
Tue, 18 Apr 2017 16:45:51 +0000 (09:45 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Apr 2017 19:42:10 +0000 (15:42 -0400)
commit13b1e5db302fe1eb58b2892e02230098f6bb455e
tree01aec125286a744e7b6cad15bc2e611940186c2b
parent4487ac6d7f7790377b0d0956dfb71bc1d5c9eec6
tcp: remove poll() flakes when receiving RST

When a RST packet is processed, we send two wakeup events to interested
polling users.

First one by a sk->sk_error_report(sk) from tcp_reset(),
followed by a sk->sk_state_change(sk) from tcp_done().

Depending on machine load and luck, poll() can either return POLLERR,
or POLLIN|POLLOUT|POLLERR|POLLHUP (this happens on 99 % of the cases)

This is probably fine, but we can avoid the confusion by reordering
things so that we have more TCP fields updated before the first wakeup.

This might even allow us to remove some barriers we added in the past.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c