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.c37
1 files changed, 20 insertions, 17 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index cb7ca569052c..412a920fe0ec 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2296,7 +2296,7 @@ void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss,
2296 return; 2296 return;
2297 2297
2298 if (tcp_write_xmit(sk, cur_mss, nonagle, 0, 2298 if (tcp_write_xmit(sk, cur_mss, nonagle, 0,
2299 sk_gfp_atomic(sk, GFP_ATOMIC))) 2299 sk_gfp_mask(sk, GFP_ATOMIC)))
2300 tcp_check_probe_timer(sk); 2300 tcp_check_probe_timer(sk);
2301} 2301}
2302 2302
@@ -3150,7 +3150,7 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
3150{ 3150{
3151 struct tcp_sock *tp = tcp_sk(sk); 3151 struct tcp_sock *tp = tcp_sk(sk);
3152 struct tcp_fastopen_request *fo = tp->fastopen_req; 3152 struct tcp_fastopen_request *fo = tp->fastopen_req;
3153 int syn_loss = 0, space, err = 0, copied; 3153 int syn_loss = 0, space, err = 0;
3154 unsigned long last_syn_loss = 0; 3154 unsigned long last_syn_loss = 0;
3155 struct sk_buff *syn_data; 3155 struct sk_buff *syn_data;
3156 3156
@@ -3188,17 +3188,18 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
3188 goto fallback; 3188 goto fallback;
3189 syn_data->ip_summed = CHECKSUM_PARTIAL; 3189 syn_data->ip_summed = CHECKSUM_PARTIAL;
3190 memcpy(syn_data->cb, syn->cb, sizeof(syn->cb)); 3190 memcpy(syn_data->cb, syn->cb, sizeof(syn->cb));
3191 copied = copy_from_iter(skb_put(syn_data, space), space, 3191 if (space) {
3192 &fo->data->msg_iter); 3192 int copied = copy_from_iter(skb_put(syn_data, space), space,
3193 if (unlikely(!copied)) { 3193 &fo->data->msg_iter);
3194 kfree_skb(syn_data); 3194 if (unlikely(!copied)) {
3195 goto fallback; 3195 kfree_skb(syn_data);
3196 } 3196 goto fallback;
3197 if (copied != space) { 3197 }
3198 skb_trim(syn_data, copied); 3198 if (copied != space) {
3199 space = copied; 3199 skb_trim(syn_data, copied);
3200 space = copied;
3201 }
3200 } 3202 }
3201
3202 /* No more data pending in inet_wait_for_connect() */ 3203 /* No more data pending in inet_wait_for_connect() */
3203 if (space == fo->size) 3204 if (space == fo->size)
3204 fo->data = NULL; 3205 fo->data = NULL;
@@ -3352,8 +3353,9 @@ void tcp_send_ack(struct sock *sk)
3352 * tcp_transmit_skb() will set the ownership to this 3353 * tcp_transmit_skb() will set the ownership to this
3353 * sock. 3354 * sock.
3354 */ 3355 */
3355 buff = alloc_skb(MAX_TCP_HEADER, sk_gfp_atomic(sk, GFP_ATOMIC)); 3356 buff = alloc_skb(MAX_TCP_HEADER,
3356 if (!buff) { 3357 sk_gfp_mask(sk, GFP_ATOMIC | __GFP_NOWARN));
3358 if (unlikely(!buff)) {
3357 inet_csk_schedule_ack(sk); 3359 inet_csk_schedule_ack(sk);
3358 inet_csk(sk)->icsk_ack.ato = TCP_ATO_MIN; 3360 inet_csk(sk)->icsk_ack.ato = TCP_ATO_MIN;
3359 inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK, 3361 inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
@@ -3375,7 +3377,7 @@ void tcp_send_ack(struct sock *sk)
3375 3377
3376 /* Send it off, this clears delayed acks for us. */ 3378 /* Send it off, this clears delayed acks for us. */
3377 skb_mstamp_get(&buff->skb_mstamp); 3379 skb_mstamp_get(&buff->skb_mstamp);
3378 tcp_transmit_skb(sk, buff, 0, sk_gfp_atomic(sk, GFP_ATOMIC)); 3380 tcp_transmit_skb(sk, buff, 0, (__force gfp_t)0);
3379} 3381}
3380EXPORT_SYMBOL_GPL(tcp_send_ack); 3382EXPORT_SYMBOL_GPL(tcp_send_ack);
3381 3383
@@ -3396,7 +3398,8 @@ static int tcp_xmit_probe_skb(struct sock *sk, int urgent, int mib)
3396 struct sk_buff *skb; 3398 struct sk_buff *skb;
3397 3399
3398 /* We don't queue it, tcp_transmit_skb() sets ownership. */ 3400 /* We don't queue it, tcp_transmit_skb() sets ownership. */
3399 skb = alloc_skb(MAX_TCP_HEADER, sk_gfp_atomic(sk, GFP_ATOMIC)); 3401 skb = alloc_skb(MAX_TCP_HEADER,
3402 sk_gfp_mask(sk, GFP_ATOMIC | __GFP_NOWARN));
3400 if (!skb) 3403 if (!skb)
3401 return -1; 3404 return -1;
3402 3405
@@ -3409,7 +3412,7 @@ static int tcp_xmit_probe_skb(struct sock *sk, int urgent, int mib)
3409 tcp_init_nondata_skb(skb, tp->snd_una - !urgent, TCPHDR_ACK); 3412 tcp_init_nondata_skb(skb, tp->snd_una - !urgent, TCPHDR_ACK);
3410 skb_mstamp_get(&skb->skb_mstamp); 3413 skb_mstamp_get(&skb->skb_mstamp);
3411 NET_INC_STATS(sock_net(sk), mib); 3414 NET_INC_STATS(sock_net(sk), mib);
3412 return tcp_transmit_skb(sk, skb, 0, GFP_ATOMIC); 3415 return tcp_transmit_skb(sk, skb, 0, (__force gfp_t)0);
3413} 3416}
3414 3417
3415void tcp_send_window_probe(struct sock *sk) 3418void tcp_send_window_probe(struct sock *sk)