aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r--net/ipv4/tcp.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 4787f86ae64c..b945c2b046c5 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1136,11 +1136,12 @@ int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
1136 /* This should be in poll */ 1136 /* This should be in poll */
1137 sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk); 1137 sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);
1138 1138
1139 mss_now = tcp_send_mss(sk, &size_goal, flags);
1140
1141 /* Ok commence sending. */ 1139 /* Ok commence sending. */
1142 copied = 0; 1140 copied = 0;
1143 1141
1142restart:
1143 mss_now = tcp_send_mss(sk, &size_goal, flags);
1144
1144 err = -EPIPE; 1145 err = -EPIPE;
1145 if (sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN)) 1146 if (sk->sk_err || (sk->sk_shutdown & SEND_SHUTDOWN))
1146 goto out_err; 1147 goto out_err;
@@ -1166,6 +1167,9 @@ new_segment:
1166 if (!sk_stream_memory_free(sk)) 1167 if (!sk_stream_memory_free(sk))
1167 goto wait_for_sndbuf; 1168 goto wait_for_sndbuf;
1168 1169
1170 if (sk_flush_backlog(sk))
1171 goto restart;
1172
1169 skb = sk_stream_alloc_skb(sk, 1173 skb = sk_stream_alloc_skb(sk,
1170 select_size(sk, sg), 1174 select_size(sk, sg),
1171 sk->sk_allocation, 1175 sk->sk_allocation,