diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r-- | net/ipv4/tcp_output.c | 15 |
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 | */ |
1036 | unsigned int tcp_current_mss(struct sock *sk, int large_allowed) | 1032 | unsigned 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 | */ |
1617 | void tcp_push_one(struct sock *sk, unsigned int mss_now) | 1617 | void 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 | ||