From: Eric Dumazet <eric.duma...@gmail.com> Date: Tue, 13 Feb 2018 06:14:12 -0800
> From: Eric Dumazet <eduma...@google.com> > > 배석진 reported that in some situations, packets for a given 5-tuple > end up being processed by different CPUS. > > This involves RPS, and fragmentation. > > 배석진 is seeing packet drops when a SYN_RECV request socket is > moved into ESTABLISH state. Other states are protected by socket lock. > > This is caused by a CPU losing the race, and simply not caring enough. > > Since this seems to occur frequently, we can do better and perform > a second lookup. > > Note that all needed memory barriers are already in the existing code, > thanks to the spin_lock()/spin_unlock() pair in inet_ehash_insert() > and reqsk_put(). The second lookup must find the new socket, > unless it has already been accepted and closed by another cpu. > > Note that the fragmentation could be avoided in the first place by > use of a correct TCP MSS option in the SYN{ACK} packet, but this > does not mean we can not be more robust. > > Many thanks to 배석진 for a very detailed analysis. > > Reported-by: 배석진 <soukjin....@samsung.com> > Signed-off-by: Eric Dumazet <eduma...@google.com> Applied, thanks Eric.