|
@@ -1806,40 +1806,6 @@ static bool tcp_snd_wnd_test(const struct tcp_sock *tp,
|
|
return !after(end_seq, tcp_wnd_end(tp));
|
|
return !after(end_seq, tcp_wnd_end(tp));
|
|
}
|
|
}
|
|
|
|
|
|
-/* This checks if the data bearing packet SKB (usually tcp_send_head(sk))
|
|
|
|
- * should be put on the wire right now. If so, it returns the number of
|
|
|
|
- * packets allowed by the congestion window.
|
|
|
|
- */
|
|
|
|
-static unsigned int tcp_snd_test(const struct sock *sk, struct sk_buff *skb,
|
|
|
|
- unsigned int cur_mss, int nonagle)
|
|
|
|
-{
|
|
|
|
- const struct tcp_sock *tp = tcp_sk(sk);
|
|
|
|
- unsigned int cwnd_quota;
|
|
|
|
-
|
|
|
|
- tcp_init_tso_segs(skb, cur_mss);
|
|
|
|
-
|
|
|
|
- if (!tcp_nagle_test(tp, skb, cur_mss, nonagle))
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- cwnd_quota = tcp_cwnd_test(tp, skb);
|
|
|
|
- if (cwnd_quota && !tcp_snd_wnd_test(tp, skb, cur_mss))
|
|
|
|
- cwnd_quota = 0;
|
|
|
|
-
|
|
|
|
- return cwnd_quota;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* Test if sending is allowed right now. */
|
|
|
|
-bool tcp_may_send_now(struct sock *sk)
|
|
|
|
-{
|
|
|
|
- const struct tcp_sock *tp = tcp_sk(sk);
|
|
|
|
- struct sk_buff *skb = tcp_send_head(sk);
|
|
|
|
-
|
|
|
|
- return skb &&
|
|
|
|
- tcp_snd_test(sk, skb, tcp_current_mss(sk),
|
|
|
|
- (tcp_skb_is_last(sk, skb) ?
|
|
|
|
- tp->nonagle : TCP_NAGLE_PUSH));
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/* Trim TSO SKB to LEN bytes, put the remaining data into a new packet
|
|
/* Trim TSO SKB to LEN bytes, put the remaining data into a new packet
|
|
* which is put after SKB on the list. It is very much like
|
|
* which is put after SKB on the list. It is very much like
|
|
* tcp_fragment() except that it may make several kinds of assumptions
|
|
* tcp_fragment() except that it may make several kinds of assumptions
|