svn commit: r304857 - head/sys/netinet/tcp_stacks
Hiren Panchasara
hiren at FreeBSD.org
Fri Aug 26 19:23:19 UTC 2016
Author: hiren
Date: Fri Aug 26 19:23:17 2016
New Revision: 304857
URL: https://svnweb.freebsd.org/changeset/base/304857
Log:
Adjust TCP module fastpath after r304803's cc_ack_received() changes.
Reported by: hiren, bz, np
Reviewed by: rrs
Sponsored by: Limelight Networks
Differential Revision: https://reviews.freebsd.org/D7664
Modified:
head/sys/netinet/tcp_stacks/fastpath.c
Modified: head/sys/netinet/tcp_stacks/fastpath.c
==============================================================================
--- head/sys/netinet/tcp_stacks/fastpath.c Fri Aug 26 19:08:58 2016 (r304856)
+++ head/sys/netinet/tcp_stacks/fastpath.c Fri Aug 26 19:23:17 2016 (r304857)
@@ -172,7 +172,10 @@ tcp_do_fastack(struct mbuf *m, struct tc
int ti_locked, u_long tiwin)
{
int acked;
+ uint16_t nsegs;
int winup_only=0;
+
+ nsegs = max(1, m->m_pkthdr.lro_nsegs);
#ifdef TCPDEBUG
/*
* The size of tcp_saveipgen must be the size of the max ip header,
@@ -278,7 +281,7 @@ tcp_do_fastack(struct mbuf *m, struct tc
* typically means increasing the congestion
* window.
*/
- cc_ack_received(tp, th, CC_ACK);
+ cc_ack_received(tp, th, nsegs, CC_ACK);
tp->snd_una = th->th_ack;
/*
@@ -502,9 +505,12 @@ tcp_do_slowpath(struct mbuf *m, struct t
{
int acked, ourfinisacked, needoutput = 0;
int rstreason, todrop, win;
+ uint16_t nsegs;
char *s;
struct in_conninfo *inc;
struct mbuf *mfree = NULL;
+
+ nsegs = max(1, m->m_pkthdr.lro_nsegs);
#ifdef TCPDEBUG
/*
* The size of tcp_saveipgen must be the size of the max ip header,
@@ -1085,7 +1091,8 @@ tcp_do_slowpath(struct mbuf *m, struct t
tp->t_dupacks = 0;
else if (++tp->t_dupacks > tcprexmtthresh ||
IN_FASTRECOVERY(tp->t_flags)) {
- cc_ack_received(tp, th, CC_DUPACK);
+ cc_ack_received(tp, th, nsegs,
+ CC_DUPACK);
if ((tp->t_flags & TF_SACK_PERMIT) &&
IN_FASTRECOVERY(tp->t_flags)) {
int awnd;
@@ -1135,7 +1142,8 @@ tcp_do_slowpath(struct mbuf *m, struct t
}
/* Congestion signal before ack. */
cc_cong_signal(tp, th, CC_NDUPACK);
- cc_ack_received(tp, th, CC_DUPACK);
+ cc_ack_received(tp, th, nsegs,
+ CC_DUPACK);
tcp_timer_activate(tp, TT_REXMT, 0);
tp->t_rtttime = 0;
if (tp->t_flags & TF_SACK_PERMIT) {
@@ -1169,7 +1177,8 @@ tcp_do_slowpath(struct mbuf *m, struct t
* segment. Restore the original
* snd_cwnd after packet transmission.
*/
- cc_ack_received(tp, th, CC_DUPACK);
+ cc_ack_received(tp, th, nsegs,
+ CC_DUPACK);
u_long oldcwnd = tp->snd_cwnd;
tcp_seq oldsndmax = tp->snd_max;
u_int sent;
@@ -1323,7 +1332,7 @@ process_ACK:
* control related information. This typically means increasing
* the congestion window.
*/
- cc_ack_received(tp, th, CC_ACK);
+ cc_ack_received(tp, th, nsegs, CC_ACK);
SOCKBUF_LOCK(&so->so_snd);
if (acked > sbavail(&so->so_snd)) {
@@ -1758,6 +1767,7 @@ tcp_do_segment_fastslow(struct mbuf *m,
int thflags;
u_long tiwin;
char *s;
+ uint16_t nsegs;
int can_enter;
struct in_conninfo *inc;
struct tcpopt to;
@@ -1765,6 +1775,7 @@ tcp_do_segment_fastslow(struct mbuf *m,
thflags = th->th_flags;
tp->sackhint.last_sack_ack = 0;
inc = &tp->t_inpcb->inp_inc;
+ nsegs = max(1, m->m_pkthdr.lro_nsegs);
/*
* If this is either a state-changing packet or current state isn't
* established, we require a write lock on tcbinfo. Otherwise, we
@@ -1983,7 +1994,10 @@ tcp_fastack(struct mbuf *m, struct tcphd
int ti_locked, u_long tiwin)
{
int acked;
+ uint16_t nsegs;
int winup_only=0;
+
+ nsegs = max(1, m->m_pkthdr.lro_nsegs);
#ifdef TCPDEBUG
/*
* The size of tcp_saveipgen must be the size of the max ip header,
@@ -2128,7 +2142,7 @@ tcp_fastack(struct mbuf *m, struct tcphd
* typically means increasing the congestion
* window.
*/
- cc_ack_received(tp, th, CC_ACK);
+ cc_ack_received(tp, th, nsegs, CC_ACK);
tp->snd_una = th->th_ack;
tp->t_dupacks = 0;
More information about the svn-src-head
mailing list