aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Bruno <sbruno@FreeBSD.org>2014-10-13 21:06:21 +0000
committerSean Bruno <sbruno@FreeBSD.org>2014-10-13 21:06:21 +0000
commit882ac53ed7ba31847423ef9ae7edee134b05cf47 (patch)
tree9b5ccc28ac1c72697d0cdb42ca9958374c7d2531
parent0f3e3bc526628b6b15c427ff5930e40275a7fd4b (diff)
downloadsrc-882ac53ed7ba31847423ef9ae7edee134b05cf47.tar.gz
src-882ac53ed7ba31847423ef9ae7edee134b05cf47.zip
Handle small file case with regards to plpmtud blackhole detection.
Submitted by: Mikhail <mp@lenta.ru> MFC after: 2 weeks Relnotes: yes
Notes
Notes: svn path=/head/; revision=273063
-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 62a9b6d17871..3702a2e7b696 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;