subflow->map_valid = 0;
 }
 
-/* sched mptcp worker to remove the subflow if no more data is pending */
+static bool subflow_is_done(const struct sock *sk)
+{
+       return sk->sk_shutdown & RCV_SHUTDOWN || sk->sk_state == TCP_CLOSE;
+}
+
+/* sched mptcp worker for subflow cleanup if no more data is pending */
 static void subflow_sched_work_if_closed(struct mptcp_sock *msk, struct sock *ssk)
 {
        struct sock *sk = (struct sock *)msk;
                    inet_sk_state_load(sk) != TCP_ESTABLISHED)))
                return;
 
-       if (skb_queue_empty(&ssk->sk_receive_queue) &&
-           !test_and_set_bit(MPTCP_WORK_CLOSE_SUBFLOW, &msk->flags))
+       if (!skb_queue_empty(&ssk->sk_receive_queue))
+               return;
+
+       if (!test_and_set_bit(MPTCP_WORK_CLOSE_SUBFLOW, &msk->flags))
+               mptcp_schedule_work(sk);
+
+       /* when the fallback subflow closes the rx side, trigger a 'dummy'
+        * ingress data fin, so that the msk state will follow along
+        */
+       if (__mptcp_check_fallback(msk) && subflow_is_done(ssk) &&
+           msk->first == ssk &&
+           mptcp_update_rcv_data_fin(msk, READ_ONCE(msk->ack_seq), true))
                mptcp_schedule_work(sk);
 }
 
        rcu_read_unlock();
 }
 
-static bool subflow_is_done(const struct sock *sk)
-{
-       return sk->sk_shutdown & RCV_SHUTDOWN || sk->sk_state == TCP_CLOSE;
-}
-
 static void subflow_state_change(struct sock *sk)
 {
        struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
                subflow_error_report(sk);
 
        subflow_sched_work_if_closed(mptcp_sk(parent), sk);
-
-       /* when the fallback subflow closes the rx side, trigger a 'dummy'
-        * ingress data fin, so that the msk state will follow along
-        */
-       if (__mptcp_check_fallback(msk) && subflow_is_done(sk) && msk->first == sk &&
-           mptcp_update_rcv_data_fin(msk, READ_ONCE(msk->ack_seq), true))
-               mptcp_schedule_work(parent);
 }
 
 void mptcp_subflow_queue_clean(struct sock *listener_sk, struct sock *listener_ssk)