subflow->send_mp_fail = 1;
                MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPFAILTX);
                subflow->send_infinite_map = 1;
-       } else if (s && inet_sk_state_load(s) != TCP_CLOSE) {
+       } else if (!sock_flag(sk, SOCK_DEAD)) {
                pr_debug("MP_FAIL response received");
 
-               mptcp_data_lock(s);
-               if (inet_sk_state_load(s) != TCP_CLOSE)
-                       sk_stop_timer(s, &s->sk_timer);
-               mptcp_data_unlock(s);
+               sk_stop_timer(s, &s->sk_timer);
        }
 }
 
 
                pr_debug("infinite mapping received");
                MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_INFINITEMAPRX);
                subflow->map_data_len = 0;
-               if (sk && inet_sk_state_load(sk) != TCP_CLOSE) {
-                       mptcp_data_lock(sk);
-                       if (inet_sk_state_load(sk) != TCP_CLOSE)
-                               sk_stop_timer(sk, &sk->sk_timer);
-                       mptcp_data_unlock(sk);
-               }
+               if (!sock_flag(ssk, SOCK_DEAD))
+                       sk_stop_timer(sk, &sk->sk_timer);
+
                return MAPPING_INVALID;
        }
 
                                tcp_send_active_reset(ssk, GFP_ATOMIC);
                                while ((skb = skb_peek(&ssk->sk_receive_queue)))
                                        sk_eat_skb(ssk, skb);
-                       } else {
+                       } else if (!sock_flag(ssk, SOCK_DEAD)) {
                                WRITE_ONCE(subflow->mp_fail_response_expect, true);
-                               /* The data lock is acquired in __mptcp_move_skbs() */
                                sk_reset_timer((struct sock *)msk,
                                               &((struct sock *)msk)->sk_timer,
                                               jiffies + TCP_RTO_MAX);