if (!check_fully_established(msk, sk, subflow, skb, &mp_opt))
                return sk->sk_state != TCP_CLOSE;
 
-       if ((mp_opt.suboptions & OPTION_MPTCP_FASTCLOSE) &&
-           msk->local_key == mp_opt.rcvr_key) {
-               WRITE_ONCE(msk->rcv_fastclose, true);
-               mptcp_schedule_work((struct sock *)msk);
-       }
+       if (unlikely(mp_opt.suboptions != OPTION_MPTCP_DSS)) {
+               if ((mp_opt.suboptions & OPTION_MPTCP_FASTCLOSE) &&
+                   msk->local_key == mp_opt.rcvr_key) {
+                       WRITE_ONCE(msk->rcv_fastclose, true);
+                       mptcp_schedule_work((struct sock *)msk);
+               }
 
-       if ((mp_opt.suboptions & OPTION_MPTCP_ADD_ADDR) && add_addr_hmac_valid(msk, &mp_opt)) {
-               if (!mp_opt.echo) {
-                       mptcp_pm_add_addr_received(msk, &mp_opt.addr);
-                       MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDR);
-               } else {
-                       mptcp_pm_add_addr_echoed(msk, &mp_opt.addr);
-                       mptcp_pm_del_add_timer(msk, &mp_opt.addr, true);
-                       MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADD);
+               if ((mp_opt.suboptions & OPTION_MPTCP_ADD_ADDR) &&
+                   add_addr_hmac_valid(msk, &mp_opt)) {
+                       if (!mp_opt.echo) {
+                               mptcp_pm_add_addr_received(msk, &mp_opt.addr);
+                               MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDR);
+                       } else {
+                               mptcp_pm_add_addr_echoed(msk, &mp_opt.addr);
+                               mptcp_pm_del_add_timer(msk, &mp_opt.addr, true);
+                               MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADD);
+                       }
+
+                       if (mp_opt.addr.port)
+                               MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_PORTADD);
                }
 
-               if (mp_opt.addr.port)
-                       MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_PORTADD);
-       }
+               if (mp_opt.suboptions & OPTION_MPTCP_RM_ADDR)
+                       mptcp_pm_rm_addr_received(msk, &mp_opt.rm_list);
 
-       if (mp_opt.suboptions & OPTION_MPTCP_RM_ADDR)
-               mptcp_pm_rm_addr_received(msk, &mp_opt.rm_list);
+               if (mp_opt.suboptions & OPTION_MPTCP_PRIO) {
+                       mptcp_pm_mp_prio_received(sk, mp_opt.backup);
+                       MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPPRIORX);
+               }
 
-       if (mp_opt.suboptions & OPTION_MPTCP_PRIO) {
-               mptcp_pm_mp_prio_received(sk, mp_opt.backup);
-               MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPPRIORX);
-       }
+               if (mp_opt.suboptions & OPTION_MPTCP_FAIL) {
+                       mptcp_pm_mp_fail_received(sk, mp_opt.fail_seq);
+                       MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPFAILRX);
+               }
 
-       if (mp_opt.suboptions & OPTION_MPTCP_FAIL) {
-               mptcp_pm_mp_fail_received(sk, mp_opt.fail_seq);
-               MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPFAILRX);
-       }
+               if (mp_opt.suboptions & OPTION_MPTCP_RST) {
+                       subflow->reset_seen = 1;
+                       subflow->reset_reason = mp_opt.reset_reason;
+                       subflow->reset_transient = mp_opt.reset_transient;
+               }
 
-       if (mp_opt.suboptions & OPTION_MPTCP_RST) {
-               subflow->reset_seen = 1;
-               subflow->reset_reason = mp_opt.reset_reason;
-               subflow->reset_transient = mp_opt.reset_transient;
+               if (!(mp_opt.suboptions & OPTION_MPTCP_DSS))
+                       return true;
        }
 
-       if (!(mp_opt.suboptions & OPTION_MPTCP_DSS))
-               return true;
-
        /* we can't wait for recvmsg() to update the ack_seq, otherwise
         * monodirectional flows will stuck
         */
 
        memset(mpext, 0, sizeof(*mpext));
 
-       if (mp_opt.use_map) {
+       if (likely(mp_opt.use_map)) {
                if (mp_opt.mpc_map) {
                        /* this is an MP_CAPABLE carrying MPTCP data
                         * we know this map the first chunk of data