@@ -143,6 +143,14 @@ static void __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk,
143143 MPTCP_SKB_CB (skb )-> offset = offset ;
144144}
145145
146+ static void mptcp_stop_timer (struct sock * sk )
147+ {
148+ struct inet_connection_sock * icsk = inet_csk (sk );
149+
150+ sk_stop_timer (sk , & icsk -> icsk_retransmit_timer );
151+ mptcp_sk (sk )-> timer_ival = 0 ;
152+ }
153+
146154/* both sockets must be locked */
147155static bool mptcp_subflow_dsn_valid (const struct mptcp_sock * msk ,
148156 struct sock * ssk )
@@ -164,6 +172,42 @@ static bool mptcp_subflow_dsn_valid(const struct mptcp_sock *msk,
164172 return mptcp_subflow_data_available (ssk );
165173}
166174
175+ static void mptcp_check_data_fin_ack (struct sock * sk )
176+ {
177+ struct mptcp_sock * msk = mptcp_sk (sk );
178+
179+ if (__mptcp_check_fallback (msk ))
180+ return ;
181+
182+ /* Look for an acknowledged DATA_FIN */
183+ if (((1 << sk -> sk_state ) &
184+ (TCPF_FIN_WAIT1 | TCPF_CLOSING | TCPF_LAST_ACK )) &&
185+ msk -> write_seq == atomic64_read (& msk -> snd_una )) {
186+ mptcp_stop_timer (sk );
187+
188+ WRITE_ONCE (msk -> snd_data_fin_enable , 0 );
189+
190+ switch (sk -> sk_state ) {
191+ case TCP_FIN_WAIT1 :
192+ inet_sk_state_store (sk , TCP_FIN_WAIT2 );
193+ sk -> sk_state_change (sk );
194+ break ;
195+ case TCP_CLOSING :
196+ fallthrough ;
197+ case TCP_LAST_ACK :
198+ inet_sk_state_store (sk , TCP_CLOSE );
199+ sk -> sk_state_change (sk );
200+ break ;
201+ }
202+
203+ if (sk -> sk_shutdown == SHUTDOWN_MASK ||
204+ sk -> sk_state == TCP_CLOSE )
205+ sk_wake_async (sk , SOCK_WAKE_WAITD , POLL_HUP );
206+ else
207+ sk_wake_async (sk , SOCK_WAKE_WAITD , POLL_IN );
208+ }
209+ }
210+
167211static bool mptcp_pending_data_fin (struct sock * sk , u64 * seq )
168212{
169213 struct mptcp_sock * msk = mptcp_sk (sk );
@@ -222,6 +266,8 @@ static void mptcp_check_data_fin(struct sock *sk)
222266 WRITE_ONCE (msk -> rcv_data_fin , 0 );
223267
224268 sk -> sk_shutdown |= RCV_SHUTDOWN ;
269+ smp_mb__before_atomic (); /* SHUTDOWN must be visible first */
270+ set_bit (MPTCP_DATA_READY , & msk -> flags );
225271
226272 switch (sk -> sk_state ) {
227273 case TCP_ESTABLISHED :
@@ -455,14 +501,6 @@ static void mptcp_check_for_eof(struct mptcp_sock *msk)
455501 }
456502}
457503
458- static void mptcp_stop_timer (struct sock * sk )
459- {
460- struct inet_connection_sock * icsk = inet_csk (sk );
461-
462- sk_stop_timer (sk , & icsk -> icsk_retransmit_timer );
463- mptcp_sk (sk )-> timer_ival = 0 ;
464- }
465-
466504static bool mptcp_ext_cache_refill (struct mptcp_sock * msk )
467505{
468506 const struct sock * sk = (const struct sock * )msk ;
0 commit comments