Ver código fonte

[TCP]: SACK fastpath did override adjusted fackets_out

Do same adjustment to SACK fastpath counters provided that
they're valid.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
Ilpo Järvinen 18 anos atrás
pai
commit
d041005116
1 arquivos alterados com 8 adições e 0 exclusões
  1. 8 0
      net/ipv4/tcp_output.c

+ 8 - 0
net/ipv4/tcp_output.c

@@ -699,6 +699,14 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss
 			tp->fackets_out -= diff;
 			tp->fackets_out -= diff;
 			if ((int)tp->fackets_out < 0)
 			if ((int)tp->fackets_out < 0)
 				tp->fackets_out = 0;
 				tp->fackets_out = 0;
+			/* SACK fastpath might overwrite it unless dealt with */
+			if (tp->fastpath_skb_hint != NULL &&
+			    after(TCP_SKB_CB(tp->fastpath_skb_hint)->seq,
+				  TCP_SKB_CB(skb)->seq)) {
+				tp->fastpath_cnt_hint -= diff;
+				if ((int)tp->fastpath_cnt_hint < 0)
+					tp->fastpath_cnt_hint = 0;
+			}
 		}
 		}
 	}
 	}