protocol.c (5e6300e7b3a4ab5b72a82079753868e91fbf9efc) | protocol.c (9531e4a83febc3fb47ac77e24cfb5ea97e50034d) |
---|---|
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 --- 120 unchanged lines hidden (view full) --- 129} 130 131static void mptcp_drop(struct sock *sk, struct sk_buff *skb) 132{ 133 sk_drops_add(sk, skb); 134 __kfree_skb(skb); 135} 136 | 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 --- 120 unchanged lines hidden (view full) --- 129} 130 131static void mptcp_drop(struct sock *sk, struct sk_buff *skb) 132{ 133 sk_drops_add(sk, skb); 134 __kfree_skb(skb); 135} 136 |
137static void mptcp_rmem_fwd_alloc_add(struct sock *sk, int size) 138{ 139 WRITE_ONCE(mptcp_sk(sk)->rmem_fwd_alloc, 140 mptcp_sk(sk)->rmem_fwd_alloc + size); 141} 142 |
|
137static void mptcp_rmem_charge(struct sock *sk, int size) 138{ | 143static void mptcp_rmem_charge(struct sock *sk, int size) 144{ |
139 mptcp_sk(sk)->rmem_fwd_alloc -= size; | 145 mptcp_rmem_fwd_alloc_add(sk, -size); |
140} 141 142static bool mptcp_try_coalesce(struct sock *sk, struct sk_buff *to, 143 struct sk_buff *from) 144{ 145 bool fragstolen; 146 int delta; 147 --- 24 unchanged lines hidden (view full) --- 172 return false; 173 174 return mptcp_try_coalesce((struct sock *)msk, to, from); 175} 176 177static void __mptcp_rmem_reclaim(struct sock *sk, int amount) 178{ 179 amount >>= PAGE_SHIFT; | 146} 147 148static bool mptcp_try_coalesce(struct sock *sk, struct sk_buff *to, 149 struct sk_buff *from) 150{ 151 bool fragstolen; 152 int delta; 153 --- 24 unchanged lines hidden (view full) --- 178 return false; 179 180 return mptcp_try_coalesce((struct sock *)msk, to, from); 181} 182 183static void __mptcp_rmem_reclaim(struct sock *sk, int amount) 184{ 185 amount >>= PAGE_SHIFT; |
180 mptcp_sk(sk)->rmem_fwd_alloc -= amount << PAGE_SHIFT; | 186 mptcp_rmem_charge(sk, amount << PAGE_SHIFT); |
181 __sk_mem_reduce_allocated(sk, amount); 182} 183 184static void mptcp_rmem_uncharge(struct sock *sk, int size) 185{ 186 struct mptcp_sock *msk = mptcp_sk(sk); 187 int reclaimable; 188 | 187 __sk_mem_reduce_allocated(sk, amount); 188} 189 190static void mptcp_rmem_uncharge(struct sock *sk, int size) 191{ 192 struct mptcp_sock *msk = mptcp_sk(sk); 193 int reclaimable; 194 |
189 msk->rmem_fwd_alloc += size; | 195 mptcp_rmem_fwd_alloc_add(sk, size); |
190 reclaimable = msk->rmem_fwd_alloc - sk_unused_reserved_mem(sk); 191 192 /* see sk_mem_uncharge() for the rationale behind the following schema */ 193 if (unlikely(reclaimable >= PAGE_SIZE)) 194 __mptcp_rmem_reclaim(sk, reclaimable); 195} 196 197static void mptcp_rfree(struct sk_buff *skb) --- 138 unchanged lines hidden (view full) --- 336 return true; 337 338 size -= msk->rmem_fwd_alloc; 339 amt = sk_mem_pages(size); 340 amount = amt << PAGE_SHIFT; 341 if (!__sk_mem_raise_allocated(sk, size, amt, SK_MEM_RECV)) 342 return false; 343 | 196 reclaimable = msk->rmem_fwd_alloc - sk_unused_reserved_mem(sk); 197 198 /* see sk_mem_uncharge() for the rationale behind the following schema */ 199 if (unlikely(reclaimable >= PAGE_SIZE)) 200 __mptcp_rmem_reclaim(sk, reclaimable); 201} 202 203static void mptcp_rfree(struct sk_buff *skb) --- 138 unchanged lines hidden (view full) --- 342 return true; 343 344 size -= msk->rmem_fwd_alloc; 345 amt = sk_mem_pages(size); 346 amount = amt << PAGE_SHIFT; 347 if (!__sk_mem_raise_allocated(sk, size, amt, SK_MEM_RECV)) 348 return false; 349 |
344 msk->rmem_fwd_alloc += amount; | 350 mptcp_rmem_fwd_alloc_add(sk, amount); |
345 return true; 346} 347 348static bool __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk, 349 struct sk_buff *skb, unsigned int offset, 350 size_t copy_len) 351{ 352 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); --- 2900 unchanged lines hidden (view full) --- 3253 __skb_queue_purge(&sk->sk_receive_queue); 3254 skb_rbtree_purge(&msk->out_of_order_queue); 3255 mptcp_data_unlock(sk); 3256 3257 /* move all the rx fwd alloc into the sk_mem_reclaim_final in 3258 * inet_sock_destruct() will dispose it 3259 */ 3260 sk_forward_alloc_add(sk, msk->rmem_fwd_alloc); | 351 return true; 352} 353 354static bool __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk, 355 struct sk_buff *skb, unsigned int offset, 356 size_t copy_len) 357{ 358 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); --- 2900 unchanged lines hidden (view full) --- 3259 __skb_queue_purge(&sk->sk_receive_queue); 3260 skb_rbtree_purge(&msk->out_of_order_queue); 3261 mptcp_data_unlock(sk); 3262 3263 /* move all the rx fwd alloc into the sk_mem_reclaim_final in 3264 * inet_sock_destruct() will dispose it 3265 */ 3266 sk_forward_alloc_add(sk, msk->rmem_fwd_alloc); |
3261 msk->rmem_fwd_alloc = 0; | 3267 WRITE_ONCE(msk->rmem_fwd_alloc, 0); |
3262 mptcp_token_destroy(msk); 3263 mptcp_pm_free_anno_list(msk); 3264 mptcp_free_local_addr_list(msk); 3265} 3266 3267static void mptcp_destroy(struct sock *sk) 3268{ 3269 struct mptcp_sock *msk = mptcp_sk(sk); --- 247 unchanged lines hidden (view full) --- 3517 pr_debug("sk=%p, how=%d", sk, how); 3518 3519 if ((how & SEND_SHUTDOWN) && mptcp_close_state(sk)) 3520 __mptcp_wr_shutdown(sk); 3521} 3522 3523static int mptcp_forward_alloc_get(const struct sock *sk) 3524{ | 3268 mptcp_token_destroy(msk); 3269 mptcp_pm_free_anno_list(msk); 3270 mptcp_free_local_addr_list(msk); 3271} 3272 3273static void mptcp_destroy(struct sock *sk) 3274{ 3275 struct mptcp_sock *msk = mptcp_sk(sk); --- 247 unchanged lines hidden (view full) --- 3523 pr_debug("sk=%p, how=%d", sk, how); 3524 3525 if ((how & SEND_SHUTDOWN) && mptcp_close_state(sk)) 3526 __mptcp_wr_shutdown(sk); 3527} 3528 3529static int mptcp_forward_alloc_get(const struct sock *sk) 3530{ |
3525 return READ_ONCE(sk->sk_forward_alloc) + mptcp_sk(sk)->rmem_fwd_alloc; | 3531 return READ_ONCE(sk->sk_forward_alloc) + 3532 READ_ONCE(mptcp_sk(sk)->rmem_fwd_alloc); |
3526} 3527 3528static int mptcp_ioctl_outq(const struct mptcp_sock *msk, u64 v) 3529{ 3530 const struct sock *sk = (void *)msk; 3531 u64 delta; 3532 3533 if (sk->sk_state == TCP_LISTEN) --- 501 unchanged lines hidden --- | 3533} 3534 3535static int mptcp_ioctl_outq(const struct mptcp_sock *msk, u64 v) 3536{ 3537 const struct sock *sk = (void *)msk; 3538 u64 delta; 3539 3540 if (sk->sk_state == TCP_LISTEN) --- 501 unchanged lines hidden --- |