svn commit: r184772 - user/kmacy/HEAD_fast_multi_xmit/sys/netinet
Kip Macy
kmacy at FreeBSD.org
Sat Nov 8 15:26:24 PST 2008
Author: kmacy
Date: Sat Nov 8 23:26:24 2008
New Revision: 184772
URL: http://svn.freebsd.org/changeset/base/184772
Log:
Bringback recursion sanity check
Modified:
user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_input.c
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_input.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_input.c Sat Nov 8 20:40:39 2008 (r184771)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_input.c Sat Nov 8 23:26:24 2008 (r184772)
@@ -3116,7 +3116,7 @@ tcp_xmit_timer(struct tcpcb *tp, int rtt
*/
void
tcp_mss_update(struct tcpcb *tp, int offer,
- struct hc_metrics_lite *metricptr, int *mtuflags)
+ struct hc_metrics_lite *metricptr, int *mtuflags, int *mssval)
{
INIT_VNET_INET(tp->t_inpcb->inp_vnet);
int mss;
@@ -3243,6 +3243,11 @@ tcp_mss_update(struct tcpcb *tp, int off
*/
mss = max(mss, 64);
+ if (mssval)
+ *mssval = mss;
+
+ if (tp->t_maxopd <= mss)
+ return;
/*
* maxopd stores the maximum length of data AND options
* in a segment; maxseg is the amount of data in a normal
@@ -3285,7 +3290,7 @@ tcp_mss(struct tcpcb *tp, int offer)
#endif
KASSERT(tp != NULL, ("%s: tp == NULL", __func__));
- tcp_mss_update(tp, offer, &metrics, &mtuflags);
+ tcp_mss_update(tp, offer, &metrics, &mtuflags, NULL);
mss = tp->t_maxseg;
inp = tp->t_inpcb;
Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_subr.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_subr.c Sat Nov 8 20:40:39 2008 (r184771)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_subr.c Sat Nov 8 23:26:24 2008 (r184772)
@@ -1553,7 +1553,8 @@ tcp_mtudisc(struct inpcb *inp, int errno
INIT_VNET_INET(inp->inp_vnet);
struct tcpcb *tp;
struct socket *so;
-
+ int mss;
+
INP_WLOCK_ASSERT(inp);
if ((inp->inp_vflag & INP_TIMEWAIT) ||
(inp->inp_vflag & INP_DROPPED))
@@ -1562,7 +1563,7 @@ tcp_mtudisc(struct inpcb *inp, int errno
tp = intotcpcb(inp);
KASSERT(tp != NULL, ("tcp_mtudisc: tp == NULL"));
- tcp_mss_update(tp, -1, NULL, NULL);
+ tcp_mss_update(tp, -1, NULL, NULL, &mss);
so = inp->inp_socket;
SOCKBUF_LOCK(&so->so_snd);
@@ -1578,6 +1579,8 @@ 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);
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 Sat Nov 8 20:40:39 2008 (r184771)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_var.h Sat Nov 8 23:26:24 2008 (r184772)
@@ -546,7 +546,7 @@ void tcp_reass_init(void);
void tcp_input(struct mbuf *, int);
u_long tcp_maxmtu(struct in_conninfo *, int *);
u_long tcp_maxmtu6(struct in_conninfo *, int *);
-void tcp_mss_update(struct tcpcb *, int, struct hc_metrics_lite *, int *);
+void tcp_mss_update(struct tcpcb *, int, struct hc_metrics_lite *, int *, int *);
void tcp_mss(struct tcpcb *, int);
int tcp_mssopt(struct in_conninfo *);
struct inpcb *
More information about the svn-src-user
mailing list