summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsbruno <sbruno@FreeBSD.org>2014-10-13 21:06:21 +0000
committersbruno <sbruno@FreeBSD.org>2014-10-13 21:06:21 +0000
commitaa538f658e0ab77010e35cf60a57e1c3cd8008be (patch)
tree9b5ccc28ac1c72697d0cdb42ca9958374c7d2531
parentf6a34b917295f203cc20e01b5987ac11d2013f88 (diff)
downloadFreeBSD-src-aa538f658e0ab77010e35cf60a57e1c3cd8008be.zip
FreeBSD-src-aa538f658e0ab77010e35cf60a57e1c3cd8008be.tar.gz
Handle small file case with regards to plpmtud blackhole detection.
Submitted by: Mikhail <mp@lenta.ru> MFC after: 2 weeks Relnotes: yes
-rw-r--r--sys/netinet/tcp_timer.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c
index 62a9b6d..3702a2e 100644
--- a/sys/netinet/tcp_timer.c
+++ b/sys/netinet/tcp_timer.c
@@ -693,7 +693,15 @@ tcp_timer_rexmt(void * xtp)
TCPT_RANGESET(tp->t_rxtcur, rexmt,
tp->t_rttmin, TCPTV_REXMTMAX);
- if (V_tcp_pmtud_blackhole_detect && (tp->t_state == TCPS_ESTABLISHED)) {
+ /*
+ * We enter the path for PLMTUD if connection is established or, if
+ * connection is FIN_WAIT_1 status, reason for the last is that if
+ * amount of data we send is very small, we could send it in couple of
+ * packets and process straight to FIN. In that case we won't catch
+ * ESTABLISHED state.
+ */
+ if (V_tcp_pmtud_blackhole_detect && (((tp->t_state == TCPS_ESTABLISHED))
+ || (tp->t_state == TCPS_FIN_WAIT_1))) {
int optlen;
#ifdef INET6
int isipv6;
OpenPOWER on IntegriCloud