@@ -118,17 +118,6 @@ static void mptcp_drop(struct sock *sk, struct sk_buff *skb)
118118 __kfree_skb (skb );
119119}
120120
121- static void mptcp_rmem_fwd_alloc_add (struct sock * sk , int size )
122- {
123- WRITE_ONCE (mptcp_sk (sk )-> rmem_fwd_alloc ,
124- mptcp_sk (sk )-> rmem_fwd_alloc + size );
125- }
126-
127- static void mptcp_rmem_charge (struct sock * sk , int size )
128- {
129- mptcp_rmem_fwd_alloc_add (sk , - size );
130- }
131-
132121static bool mptcp_try_coalesce (struct sock * sk , struct sk_buff * to ,
133122 struct sk_buff * from )
134123{
@@ -149,7 +138,7 @@ static bool mptcp_try_coalesce(struct sock *sk, struct sk_buff *to,
149138 * negative one
150139 */
151140 atomic_add (delta , & sk -> sk_rmem_alloc );
152- mptcp_rmem_charge (sk , delta );
141+ sk_mem_charge (sk , delta );
153142 kfree_skb_partial (from , fragstolen );
154143
155144 return true;
@@ -164,44 +153,6 @@ static bool mptcp_ooo_try_coalesce(struct mptcp_sock *msk, struct sk_buff *to,
164153 return mptcp_try_coalesce ((struct sock * )msk , to , from );
165154}
166155
167- static void __mptcp_rmem_reclaim (struct sock * sk , int amount )
168- {
169- amount >>= PAGE_SHIFT ;
170- mptcp_rmem_charge (sk , amount << PAGE_SHIFT );
171- __sk_mem_reduce_allocated (sk , amount );
172- }
173-
174- static void mptcp_rmem_uncharge (struct sock * sk , int size )
175- {
176- struct mptcp_sock * msk = mptcp_sk (sk );
177- int reclaimable ;
178-
179- mptcp_rmem_fwd_alloc_add (sk , size );
180- reclaimable = msk -> rmem_fwd_alloc - sk_unused_reserved_mem (sk );
181-
182- /* see sk_mem_uncharge() for the rationale behind the following schema */
183- if (unlikely (reclaimable >= PAGE_SIZE ))
184- __mptcp_rmem_reclaim (sk , reclaimable );
185- }
186-
187- static void mptcp_rfree (struct sk_buff * skb )
188- {
189- unsigned int len = skb -> truesize ;
190- struct sock * sk = skb -> sk ;
191-
192- atomic_sub (len , & sk -> sk_rmem_alloc );
193- mptcp_rmem_uncharge (sk , len );
194- }
195-
196- void mptcp_set_owner_r (struct sk_buff * skb , struct sock * sk )
197- {
198- skb_orphan (skb );
199- skb -> sk = sk ;
200- skb -> destructor = mptcp_rfree ;
201- atomic_add (skb -> truesize , & sk -> sk_rmem_alloc );
202- mptcp_rmem_charge (sk , skb -> truesize );
203- }
204-
205156/* "inspired" by tcp_data_queue_ofo(), main differences:
206157 * - use mptcp seqs
207158 * - don't cope with sacks
@@ -314,25 +265,7 @@ static void mptcp_data_queue_ofo(struct mptcp_sock *msk, struct sk_buff *skb)
314265
315266end :
316267 skb_condense (skb );
317- mptcp_set_owner_r (skb , sk );
318- }
319-
320- static bool mptcp_rmem_schedule (struct sock * sk , struct sock * ssk , int size )
321- {
322- struct mptcp_sock * msk = mptcp_sk (sk );
323- int amt , amount ;
324-
325- if (size <= msk -> rmem_fwd_alloc )
326- return true;
327-
328- size -= msk -> rmem_fwd_alloc ;
329- amt = sk_mem_pages (size );
330- amount = amt << PAGE_SHIFT ;
331- if (!__sk_mem_raise_allocated (sk , size , amt , SK_MEM_RECV ))
332- return false;
333-
334- mptcp_rmem_fwd_alloc_add (sk , amount );
335- return true;
268+ skb_set_owner_r (skb , sk );
336269}
337270
338271static bool __mptcp_move_skb (struct mptcp_sock * msk , struct sock * ssk ,
@@ -350,7 +283,7 @@ static bool __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk,
350283 skb_orphan (skb );
351284
352285 /* try to fetch required memory from subflow */
353- if (!mptcp_rmem_schedule (sk , ssk , skb -> truesize )) {
286+ if (!sk_rmem_schedule (sk , skb , skb -> truesize )) {
354287 MPTCP_INC_STATS (sock_net (sk ), MPTCP_MIB_RCVPRUNED );
355288 goto drop ;
356289 }
@@ -374,7 +307,7 @@ static bool __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk,
374307 if (tail && mptcp_try_coalesce (sk , tail , skb ))
375308 return true;
376309
377- mptcp_set_owner_r (skb , sk );
310+ skb_set_owner_r (skb , sk );
378311 __skb_queue_tail (& sk -> sk_receive_queue , skb );
379312 return true;
380313 } else if (after64 (MPTCP_SKB_CB (skb )-> map_seq , msk -> ack_seq )) {
@@ -1077,17 +1010,10 @@ static void __mptcp_clean_una(struct sock *sk)
10771010
10781011static void __mptcp_clean_una_wakeup (struct sock * sk )
10791012{
1080- lockdep_assert_held_once (& sk -> sk_lock .slock );
1081-
10821013 __mptcp_clean_una (sk );
10831014 mptcp_write_space (sk );
10841015}
10851016
1086- static void mptcp_clean_una_wakeup (struct sock * sk )
1087- {
1088- __mptcp_clean_una_wakeup (sk );
1089- }
1090-
10911017static void mptcp_enter_memory_pressure (struct sock * sk )
10921018{
10931019 struct mptcp_subflow_context * subflow ;
@@ -1992,9 +1918,10 @@ static int __mptcp_recvmsg_mskq(struct sock *sk,
19921918 }
19931919
19941920 if (!(flags & MSG_PEEK )) {
1995- /* we will bulk release the skb memory later */
1921+ /* avoid the indirect call, we know the destructor is sock_wfree */
19961922 skb -> destructor = NULL ;
1997- WRITE_ONCE (msk -> rmem_released , msk -> rmem_released + skb -> truesize );
1923+ atomic_sub (skb -> truesize , & sk -> sk_rmem_alloc );
1924+ sk_mem_uncharge (sk , skb -> truesize );
19981925 __skb_unlink (skb , & sk -> sk_receive_queue );
19991926 __kfree_skb (skb );
20001927 msk -> bytes_consumed += count ;
@@ -2107,18 +2034,6 @@ static void mptcp_rcv_space_adjust(struct mptcp_sock *msk, int copied)
21072034 msk -> rcvq_space .time = mstamp ;
21082035}
21092036
2110- static void __mptcp_update_rmem (struct sock * sk )
2111- {
2112- struct mptcp_sock * msk = mptcp_sk (sk );
2113-
2114- if (!msk -> rmem_released )
2115- return ;
2116-
2117- atomic_sub (msk -> rmem_released , & sk -> sk_rmem_alloc );
2118- mptcp_rmem_uncharge (sk , msk -> rmem_released );
2119- WRITE_ONCE (msk -> rmem_released , 0 );
2120- }
2121-
21222037static bool __mptcp_move_skbs (struct sock * sk )
21232038{
21242039 struct mptcp_sock * msk = mptcp_sk (sk );
@@ -2133,7 +2048,6 @@ static bool __mptcp_move_skbs(struct sock *sk)
21332048 break ;
21342049
21352050 slowpath = lock_sock_fast (ssk );
2136- __mptcp_update_rmem (sk );
21372051 done = __mptcp_move_skbs_from_subflow (msk , ssk , & moved );
21382052
21392053 if (unlikely (ssk -> sk_err ))
@@ -2143,10 +2057,9 @@ static bool __mptcp_move_skbs(struct sock *sk)
21432057
21442058 ret = moved > 0 ;
21452059 if (!RB_EMPTY_ROOT (& msk -> out_of_order_queue ) ||
2146- !skb_queue_empty (& sk -> sk_receive_queue )) {
2147- __mptcp_update_rmem (sk );
2060+ !skb_queue_empty (& sk -> sk_receive_queue ))
21482061 ret |= __mptcp_ofo_queue (msk );
2149- }
2062+
21502063 if (ret )
21512064 mptcp_check_data_fin ((struct sock * )msk );
21522065 return ret ;
@@ -2371,17 +2284,13 @@ bool __mptcp_retransmit_pending_data(struct sock *sk)
23712284 * some data in the mptcp rtx queue has not really xmitted yet.
23722285 * keep it simple and re-inject the whole mptcp level rtx queue
23732286 */
2374- mptcp_data_lock (sk );
23752287 __mptcp_clean_una_wakeup (sk );
23762288 rtx_head = mptcp_rtx_head (sk );
2377- if (!rtx_head ) {
2378- mptcp_data_unlock (sk );
2289+ if (!rtx_head )
23792290 return false;
2380- }
23812291
23822292 msk -> recovery_snd_nxt = msk -> snd_nxt ;
23832293 msk -> recovery = true;
2384- mptcp_data_unlock (sk );
23852294
23862295 msk -> first_pending = rtx_head ;
23872296 msk -> snd_burst = 0 ;
@@ -2640,7 +2549,7 @@ static void __mptcp_retrans(struct sock *sk)
26402549 int ret , err ;
26412550 u16 len = 0 ;
26422551
2643- mptcp_clean_una_wakeup (sk );
2552+ __mptcp_clean_una_wakeup (sk );
26442553
26452554 /* first check ssk: need to kick "stale" logic */
26462555 err = mptcp_sched_get_retrans (msk );
@@ -2813,8 +2722,6 @@ static void __mptcp_init_sock(struct sock *sk)
28132722 INIT_WORK (& msk -> work , mptcp_worker );
28142723 msk -> out_of_order_queue = RB_ROOT ;
28152724 msk -> first_pending = NULL ;
2816- WRITE_ONCE (msk -> rmem_fwd_alloc , 0 );
2817- WRITE_ONCE (msk -> rmem_released , 0 );
28182725 msk -> timer_ival = TCP_RTO_MIN ;
28192726 msk -> scaling_ratio = TCP_DEFAULT_SCALING_RATIO ;
28202727
@@ -3040,8 +2947,6 @@ static void __mptcp_destroy_sock(struct sock *sk)
30402947
30412948 sk -> sk_prot -> destroy (sk );
30422949
3043- WARN_ON_ONCE (READ_ONCE (msk -> rmem_fwd_alloc ));
3044- WARN_ON_ONCE (msk -> rmem_released );
30452950 sk_stream_kill_queues (sk );
30462951 xfrm_sk_free_policy (sk );
30472952
@@ -3399,8 +3304,6 @@ void mptcp_destroy_common(struct mptcp_sock *msk, unsigned int flags)
33993304 /* move all the rx fwd alloc into the sk_mem_reclaim_final in
34003305 * inet_sock_destruct() will dispose it
34013306 */
3402- sk_forward_alloc_add (sk , msk -> rmem_fwd_alloc );
3403- WRITE_ONCE (msk -> rmem_fwd_alloc , 0 );
34043307 mptcp_token_destroy (msk );
34053308 mptcp_pm_free_anno_list (msk );
34063309 mptcp_free_local_addr_list (msk );
@@ -3493,8 +3396,6 @@ static void mptcp_release_cb(struct sock *sk)
34933396 if (__test_and_clear_bit (MPTCP_SYNC_SNDBUF , & msk -> cb_flags ))
34943397 __mptcp_sync_sndbuf (sk );
34953398 }
3496-
3497- __mptcp_update_rmem (sk );
34983399}
34993400
35003401/* MP_JOIN client subflow must wait for 4th ack before sending any data:
@@ -3665,12 +3566,6 @@ static void mptcp_shutdown(struct sock *sk, int how)
36653566 __mptcp_wr_shutdown (sk );
36663567}
36673568
3668- static int mptcp_forward_alloc_get (const struct sock * sk )
3669- {
3670- return READ_ONCE (sk -> sk_forward_alloc ) +
3671- READ_ONCE (mptcp_sk (sk )-> rmem_fwd_alloc );
3672- }
3673-
36743569static int mptcp_ioctl_outq (const struct mptcp_sock * msk , u64 v )
36753570{
36763571 const struct sock * sk = (void * )msk ;
@@ -3828,7 +3723,6 @@ static struct proto mptcp_prot = {
38283723 .hash = mptcp_hash ,
38293724 .unhash = mptcp_unhash ,
38303725 .get_port = mptcp_get_port ,
3831- .forward_alloc_get = mptcp_forward_alloc_get ,
38323726 .stream_memory_free = mptcp_stream_memory_free ,
38333727 .sockets_allocated = & mptcp_sockets_allocated ,
38343728
0 commit comments