Rack and BBR broken with the new timewait state purge.
We recently got rid of the explicit INP_TIMEWAIT state, this has caused some minor breakage to both rack and bbr. Basically the timewait check that was in tcp_lro.c is now gone. This means that compressed_ack and mbuf_queued packets will arrive at TCP without going through tcp_input_with_port(). We need to expand the check that was stripped to look at the tcp_state (t_state) and not "LRO" packets that are in the TCPS_TIMEWAIT state. Reviewed by: tuexen, gliebus Sponsored by: Netflix Inc Differential Revision: https://reviews.freebsd.org/D37080
This commit is contained in:
parent
13b1d6f0c9
commit
31bc602ff8
@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <netinet/tcpip.h>
|
#include <netinet/tcpip.h>
|
||||||
#include <netinet/tcp_hpts.h>
|
#include <netinet/tcp_hpts.h>
|
||||||
#include <netinet/tcp_log_buf.h>
|
#include <netinet/tcp_log_buf.h>
|
||||||
|
#include <netinet/tcp_fsm.h>
|
||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet6/ip6_var.h>
|
#include <netinet6/ip6_var.h>
|
||||||
|
|
||||||
@ -1359,7 +1360,9 @@ tcp_lro_flush_tcphpts(struct lro_ctrl *lc, struct lro_entry *le)
|
|||||||
tp = intotcpcb(inp);
|
tp = intotcpcb(inp);
|
||||||
|
|
||||||
/* Check if the inp is dead, Jim. */
|
/* Check if the inp is dead, Jim. */
|
||||||
if (tp == NULL || (inp->inp_flags & INP_DROPPED)) {
|
if (tp == NULL ||
|
||||||
|
(inp->inp_flags & INP_DROPPED) ||
|
||||||
|
(tp->t_state == TCPS_TIME_WAIT)) {
|
||||||
INP_WUNLOCK(inp);
|
INP_WUNLOCK(inp);
|
||||||
return (TCP_LRO_CANNOT);
|
return (TCP_LRO_CANNOT);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user