aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r--net/ipv4/tcp_output.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index ba85d8831893..fe3b4bdfd251 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -1028,10 +1028,6 @@ unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu)
1028 1028
1029/* Compute the current effective MSS, taking SACKs and IP options, 1029/* Compute the current effective MSS, taking SACKs and IP options,
1030 * and even PMTU discovery events into account. 1030 * and even PMTU discovery events into account.
1031 *
1032 * LARGESEND note: !tcp_urg_mode is overkill, only frames up to snd_up
1033 * cannot be large. However, taking into account rare use of URG, this
1034 * is not a big flaw.
1035 */ 1031 */
1036unsigned int tcp_current_mss(struct sock *sk, int large_allowed) 1032unsigned int tcp_current_mss(struct sock *sk, int large_allowed)
1037{ 1033{
@@ -1046,7 +1042,7 @@ unsigned int tcp_current_mss(struct sock *sk, int large_allowed)
1046 1042
1047 mss_now = tp->mss_cache; 1043 mss_now = tp->mss_cache;
1048 1044
1049 if (large_allowed && sk_can_gso(sk) && !tcp_urg_mode(tp)) 1045 if (large_allowed && sk_can_gso(sk))
1050 doing_tso = 1; 1046 doing_tso = 1;
1051 1047
1052 if (dst) { 1048 if (dst) {
@@ -1516,6 +1512,10 @@ static int tcp_mtu_probe(struct sock *sk)
1516 * send_head. This happens as incoming acks open up the remote 1512 * send_head. This happens as incoming acks open up the remote
1517 * window for us. 1513 * window for us.
1518 * 1514 *
1515 * LARGESEND note: !tcp_urg_mode is overkill, only frames between
1516 * snd_up-64k-mss .. snd_up cannot be large. However, taking into
1517 * account rare use of URG, this is not a big flaw.
1518 *
1519 * Returns 1, if no segments are in flight and we have queued segments, but 1519 * Returns 1, if no segments are in flight and we have queued segments, but
1520 * cannot send anything now because of SWS or another problem. 1520 * cannot send anything now because of SWS or another problem.
1521 */ 1521 */
@@ -1567,7 +1567,7 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
1567 } 1567 }
1568 1568
1569 limit = mss_now; 1569 limit = mss_now;
1570 if (tso_segs > 1) 1570 if (tso_segs > 1 && !tcp_urg_mode(tp))
1571 limit = tcp_mss_split_point(sk, skb, mss_now, 1571 limit = tcp_mss_split_point(sk, skb, mss_now,
1572 cwnd_quota); 1572 cwnd_quota);
1573 1573
@@ -1616,6 +1616,7 @@ void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss,
1616 */ 1616 */
1617void tcp_push_one(struct sock *sk, unsigned int mss_now) 1617void tcp_push_one(struct sock *sk, unsigned int mss_now)
1618{ 1618{
1619 struct tcp_sock *tp = tcp_sk(sk);
1619 struct sk_buff *skb = tcp_send_head(sk); 1620 struct sk_buff *skb = tcp_send_head(sk);
1620 unsigned int tso_segs, cwnd_quota; 1621 unsigned int tso_segs, cwnd_quota;
1621 1622
@@ -1630,7 +1631,7 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now)
1630 BUG_ON(!tso_segs); 1631 BUG_ON(!tso_segs);
1631 1632
1632 limit = mss_now; 1633 limit = mss_now;
1633 if (tso_segs > 1) 1634 if (tso_segs > 1 && !tcp_urg_mode(tp))
1634 limit = tcp_mss_split_point(sk, skb, mss_now, 1635 limit = tcp_mss_split_point(sk, skb, mss_now,
1635 cwnd_quota); 1636 cwnd_quota);
1636 1637