@@ -922,6 +922,8 @@ static bool __mptcp_finish_join(struct mptcp_sock *msk, struct sock *ssk)
922922 mptcp_subflow_ctx (ssk )-> subflow_id = msk -> subflow_id ++ ;
923923 mptcp_sockopt_sync_locked (msk , ssk );
924924 mptcp_stop_tout_timer (sk );
925+ __mptcp_inherit_cgrp_data (sk , ssk );
926+ __mptcp_inherit_memcg (sk , ssk , GFP_ATOMIC );
925927 __mptcp_propagate_sndbuf (sk , ssk );
926928 return true;
927929}
@@ -4039,6 +4041,29 @@ static int mptcp_listen(struct socket *sock, int backlog)
40394041 return err ;
40404042}
40414043
4044+ static void mptcp_graph_subflows (struct sock * sk )
4045+ {
4046+ struct mptcp_subflow_context * subflow ;
4047+ struct mptcp_sock * msk = mptcp_sk (sk );
4048+
4049+ mptcp_for_each_subflow (msk , subflow ) {
4050+ struct sock * ssk = mptcp_subflow_tcp_sock (subflow );
4051+ bool slow ;
4052+
4053+ slow = lock_sock_fast (ssk );
4054+
4055+ /* set ssk->sk_socket of accept()ed flows to mptcp socket.
4056+ * This is needed so NOSPACE flag can be set from tcp stack.
4057+ */
4058+ if (!ssk -> sk_socket )
4059+ mptcp_sock_graft (ssk , sk -> sk_socket );
4060+
4061+ __mptcp_inherit_cgrp_data (sk , ssk );
4062+ __mptcp_inherit_memcg (sk , ssk , GFP_KERNEL );
4063+ unlock_sock_fast (ssk , slow );
4064+ }
4065+ }
4066+
40424067static int mptcp_stream_accept (struct socket * sock , struct socket * newsock ,
40434068 struct proto_accept_arg * arg )
40444069{
@@ -4086,16 +4111,7 @@ static int mptcp_stream_accept(struct socket *sock, struct socket *newsock,
40864111 msk = mptcp_sk (newsk );
40874112 msk -> in_accept_queue = 0 ;
40884113
4089- /* set ssk->sk_socket of accept()ed flows to mptcp socket.
4090- * This is needed so NOSPACE flag can be set from tcp stack.
4091- */
4092- mptcp_for_each_subflow (msk , subflow ) {
4093- struct sock * ssk = mptcp_subflow_tcp_sock (subflow );
4094-
4095- if (!ssk -> sk_socket )
4096- mptcp_sock_graft (ssk , newsock );
4097- }
4098-
4114+ mptcp_graph_subflows (newsk );
40994115 mptcp_rps_record_subflows (msk );
41004116
41014117 /* Do late cleanup for the first subflow as necessary. Also
0 commit comments