protocol.c (419ce133ab928ab5efd7b50b2ef36ddfd4eadbd2) | protocol.c (72377ab2d671befd6390a1d5677f5cca61235b65) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* Multipath TCP 3 * 4 * Copyright (c) 2017 - 2019, Intel Corporation. 5 */ 6 7#define pr_fmt(fmt) "MPTCP: " fmt 8 --- 1284 unchanged lines hidden (view full) --- 1293 mpext = skb_ext_find(skb, SKB_EXT_MPTCP); 1294 } 1295 1296 /* Zero window and all data acked? Probe. */ 1297 copy = mptcp_check_allowed_size(msk, ssk, data_seq, copy); 1298 if (copy == 0) { 1299 u64 snd_una = READ_ONCE(msk->snd_una); 1300 | 1// SPDX-License-Identifier: GPL-2.0 2/* Multipath TCP 3 * 4 * Copyright (c) 2017 - 2019, Intel Corporation. 5 */ 6 7#define pr_fmt(fmt) "MPTCP: " fmt 8 --- 1284 unchanged lines hidden (view full) --- 1293 mpext = skb_ext_find(skb, SKB_EXT_MPTCP); 1294 } 1295 1296 /* Zero window and all data acked? Probe. */ 1297 copy = mptcp_check_allowed_size(msk, ssk, data_seq, copy); 1298 if (copy == 0) { 1299 u64 snd_una = READ_ONCE(msk->snd_una); 1300 |
1301 if (snd_una != msk->snd_nxt) { | 1301 if (snd_una != msk->snd_nxt || tcp_write_queue_tail(ssk)) { |
1302 tcp_remove_empty_skb(ssk); 1303 return 0; 1304 } 1305 1306 zero_window_probe = true; 1307 data_seq = snd_una - 1; 1308 copy = 1; | 1302 tcp_remove_empty_skb(ssk); 1303 return 0; 1304 } 1305 1306 zero_window_probe = true; 1307 data_seq = snd_una - 1; 1308 copy = 1; |
1309 1310 /* all mptcp-level data is acked, no skbs should be present into the 1311 * ssk write queue 1312 */ 1313 WARN_ON_ONCE(reuse_skb); | |
1314 } 1315 1316 copy = min_t(size_t, copy, info->limit - info->sent); 1317 if (!sk_wmem_schedule(ssk, copy)) { 1318 tcp_remove_empty_skb(ssk); 1319 return -ENOMEM; 1320 } 1321 --- 12 unchanged lines hidden (view full) --- 1334 WRITE_ONCE(tcp_sk(ssk)->write_seq, tcp_sk(ssk)->write_seq + copy); 1335 TCP_SKB_CB(skb)->end_seq += copy; 1336 tcp_skb_pcount_set(skb, 0); 1337 1338 /* on skb reuse we just need to update the DSS len */ 1339 if (reuse_skb) { 1340 TCP_SKB_CB(skb)->tcp_flags &= ~TCPHDR_PSH; 1341 mpext->data_len += copy; | 1309 } 1310 1311 copy = min_t(size_t, copy, info->limit - info->sent); 1312 if (!sk_wmem_schedule(ssk, copy)) { 1313 tcp_remove_empty_skb(ssk); 1314 return -ENOMEM; 1315 } 1316 --- 12 unchanged lines hidden (view full) --- 1329 WRITE_ONCE(tcp_sk(ssk)->write_seq, tcp_sk(ssk)->write_seq + copy); 1330 TCP_SKB_CB(skb)->end_seq += copy; 1331 tcp_skb_pcount_set(skb, 0); 1332 1333 /* on skb reuse we just need to update the DSS len */ 1334 if (reuse_skb) { 1335 TCP_SKB_CB(skb)->tcp_flags &= ~TCPHDR_PSH; 1336 mpext->data_len += copy; |
1342 WARN_ON_ONCE(zero_window_probe); | |
1343 goto out; 1344 } 1345 1346 memset(mpext, 0, sizeof(*mpext)); 1347 mpext->data_seq = data_seq; 1348 mpext->subflow_seq = mptcp_subflow_ctx(ssk)->rel_write_seq; 1349 mpext->data_len = copy; 1350 mpext->use_map = 1; --- 2723 unchanged lines hidden --- | 1337 goto out; 1338 } 1339 1340 memset(mpext, 0, sizeof(*mpext)); 1341 mpext->data_seq = data_seq; 1342 mpext->subflow_seq = mptcp_subflow_ctx(ssk)->rel_write_seq; 1343 mpext->data_len = copy; 1344 mpext->use_map = 1; --- 2723 unchanged lines hidden --- |