svn commit: r304857 - head/sys/netinet/tcp_stacks

Lawrence Stewart lstewart at room52.net
Sat Aug 27 03:54:43 UTC 2016


Pointy hat to: lstewart@

Apologies all for the breakage, thanks Hiren for fixing and apologies
also for missing your email. For some reason your reply to my commit did
not make it to my inbox and was filtered straight to my mailing list
folder which is annoying - I must have introduced a bug in my
.procmailrc at some point.

I don't understand why my buildkernel prior to commit succeeded though.
Is fastpath not build by default?

Cheers,
Lawrence

On 08/27/16 05:23, Hiren Panchasara wrote:
> 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-all mailing list