svn commit: r184864 - user/kmacy/HEAD_fast_multi_xmit/sys/netinet
Kip Macy
kmacy at FreeBSD.org
Tue Nov 11 23:32:07 PST 2008
Author: kmacy
Date: Wed Nov 12 07:32:07 2008
New Revision: 184864
URL: http://svn.freebsd.org/changeset/base/184864
Log:
Work around possible infinite recursion in tcp_mtudisc, allowing tcp_output
to be called even if maxopd is smaller than mss
Modified:
user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_subr.c
user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_var.h
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_subr.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_subr.c Wed Nov 12 07:16:23 2008 (r184863)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_subr.c Wed Nov 12 07:32:07 2008 (r184864)
@@ -1579,9 +1579,13 @@ tcp_mtudisc(struct inpcb *inp, int errno
tp->snd_recover = tp->snd_max;
if (tp->t_flags & TF_SACK_PERMIT)
EXIT_FASTRECOVERY(tp);
- if (tp->t_maxopd <= mss)
- return (inp);
- tcp_output_send(tp);
+
+ if ((tp->t_flags & TF_RECURSE) == 0) {
+ tp->t_flags |= TF_RECURSE;
+ tcp_output_send(tp);
+ tp->t_flags &= ~TF_RECURSE;
+ }
+
return (inp);
}
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_var.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_var.h Wed Nov 12 07:16:23 2008 (r184863)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_var.h Wed Nov 12 07:32:07 2008 (r184864)
@@ -127,7 +127,8 @@ struct tcpcb {
#define TF_ECN_PERMIT 0x4000000 /* connection ECN-ready */
#define TF_ECN_SND_CWR 0x8000000 /* ECN CWR in queue */
#define TF_ECN_SND_ECE 0x10000000 /* ECN ECE in queue */
-
+#define TF_RECURSE 0x20000000 /* potentially recursing in tcp_output */
+
tcp_seq snd_una; /* send unacknowledged */
tcp_seq snd_max; /* highest sequence number sent;
* used to recognize retransmits
More information about the svn-src-user
mailing list