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 | ||
